23

我想为一些单元测试创​​建一些数据目录,并且我希望这些目录位于用户的默认临时目录中。

我想我可以在 /tmp 下创建一个子目录,但我不想假设有人如何设置自己的机器。

我计划即时编写测试数据,这就是为什么我想把它放到一个临时目录中。

4

4 回答 4

39

不要使用tmpnam()tempnam()。它们是不安全的(有关详细信息,请参见手册页)。不要假设/tmpNSTemporaryDirectory()与 结合使用mkdtemp()NSTemporaryDirectory()会给你一个更好的使用目录,但是它可以返回nil. 我使用了类似这样的代码:

NSString * tempDir = NSTemporaryDirectory();
if (tempDir == nil)
    tempDir = @"/tmp";

NSString * template = [tempDir stringByAppendingPathComponent: @"temp.XXXXXX"];
NSLog(@"Template: %@", template);
const char * fsTemplate = [template fileSystemRepresentation];
NSMutableData * bufferData = [NSMutableData dataWithBytes: fsTemplate
                                                   length: strlen(fsTemplate)+1];
char * buffer = [bufferData mutableBytes];
NSLog(@"FS Template: %s", buffer);
char * result = mkdtemp(buffer);
NSString * temporaryDirectory = [[NSFileManager defaultManager]
        stringWithFileSystemRepresentation: buffer
                                    length: strlen(buffer)];

您现在可以在temporaryDirectory. 删除NSLogs生产代码。

于 2008-12-17T14:07:03.877 回答
8

回顾那里的这个问题和 NSTemporaryDirectory() 的文档,如果您使用的是 10.6 或更高版本,那么建议您使用 NSFileManager 中的URLForDirectory:inDomain:appropriateForURL:create:error:方法,以获得更灵活的创建目录的方法.

它返回一个 URL 而不是字符串路径,这是我们推荐使用的另一件事。

于 2012-03-21T22:17:34.540 回答
6

在 Objective-C 中,您可以使用 NSTemporaryDirectory()。

于 2008-12-17T18:35:27.487 回答
5

使用tempnam()、tmpnam() 或 tmpfile()函数。

于 2008-12-17T12:47:46.080 回答