我想为一些单元测试创建一些数据目录,并且我希望这些目录位于用户的默认临时目录中。
我想我可以在 /tmp 下创建一个子目录,但我不想假设有人如何设置自己的机器。
我计划即时编写测试数据,这就是为什么我想把它放到一个临时目录中。
我想为一些单元测试创建一些数据目录,并且我希望这些目录位于用户的默认临时目录中。
我想我可以在 /tmp 下创建一个子目录,但我不想假设有人如何设置自己的机器。
我计划即时编写测试数据,这就是为什么我想把它放到一个临时目录中。
不要使用tmpnam()
或tempnam()
。它们是不安全的(有关详细信息,请参见手册页)。不要假设/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
生产代码。
回顾那里的这个问题和 NSTemporaryDirectory() 的文档,如果您使用的是 10.6 或更高版本,那么建议您使用 NSFileManager 中的URLForDirectory:inDomain:appropriateForURL:create:error:方法,以获得更灵活的创建目录的方法.
它返回一个 URL 而不是字符串路径,这是我们推荐使用的另一件事。
在 Objective-C 中,您可以使用 NSTemporaryDirectory()。