如何在Mac OS X上获取默认临时目录?

时间:2008-12-17 12:42:54

标签: objective-c macos cocoa test-data temporary-directory

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

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

我打算动态编写测试数据,这就是为什么我想把它放到一个临时目录中。

4 个答案:

答案 0 :(得分:39)

请勿使用tmpnam()tempnam()。它们不安全(有关详细信息,请参阅man page)。不要假设/tmp。将NSTemporaryDirectory()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

答案 1 :(得分:8)

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

它返回一个URL而不是一个字符串路径,这是我们建议使用的另一个东西。

答案 2 :(得分:6)

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

答案 3 :(得分:5)