OSX 中的标准临时目录
Standard temporary directory in OSX
我正在尝试确定在我的应用程序 OSX 版本中存储临时文件的最佳位置。
明显答案/tmp不好,因为它在启动时被清理,我的应用程序可能需要继续中断的工作重启后也是。
我也尝试使用环境变量 TMPDIR 指向的路径,这与 NSTemporaryDirectory() 返回的路径相同每次启动都会更改,类似于:
/var/folders/wx/p4rqqs8d1ws0wlpx9dkwsh_80000gn/T/
..但此路径的内容也会在启动时被删除。
有一个标准路径,我可以在其中放置一些临时文件,以适应重新启动,或者我必须发明自己的解决方案(即 ~/Library/myapplication/temp)?
在 Windows 中,我正在使用 GetTempPath() 并且它按应有的方式工作。
您应该使用 "application support directory" - 这通常是 ~/Library/Application Support
或用于沙盒应用程序及其容器中的等效项。
要获取此目录的 URL,您使用 URLForDirectory:inDomain:appropriateForURL:create:error:
作为第一个参数传递 NSApplicationSupportDirectory
。
在此目录中,您需要为您的应用程序创建一个目录,使用您的应用程序的包 ID 是命名此目录的常见策略。
此目录用于存储您的应用程序所需的文件,而不是您用户的文件。
在这篇优秀的文章中,我发现我的答案比在这里提问之前更难谷歌搜索:
https://www.cocoawithlove.com/2009/07/temporary-files-and-folders-in-cocoa.html
阅读文章和各种选项后,我发现缓存目录 (NSCachesDirectory) 是存储文件的正确位置。将它们放在 "Application Support" 将导致它们被时间机器备份。
这就是我所做的:
const char *get_temporary_dir()
{
NSString *path = nil;
NSString *bundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
if ([paths count]) {
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:bundleName];
} else {
path = NSTemporaryDirectory();
path = [path stringByAppendingPathComponent:bundleName];
}
return [path UTF8String];
}
...我不确定是否需要回退到标准的、可删除的目录,但这没有坏处!
我正在尝试确定在我的应用程序 OSX 版本中存储临时文件的最佳位置。
明显答案/tmp不好,因为它在启动时被清理,我的应用程序可能需要继续中断的工作重启后也是。
我也尝试使用环境变量 TMPDIR 指向的路径,这与 NSTemporaryDirectory() 返回的路径相同每次启动都会更改,类似于:
/var/folders/wx/p4rqqs8d1ws0wlpx9dkwsh_80000gn/T/
..但此路径的内容也会在启动时被删除。
有一个标准路径,我可以在其中放置一些临时文件,以适应重新启动,或者我必须发明自己的解决方案(即 ~/Library/myapplication/temp)?
在 Windows 中,我正在使用 GetTempPath() 并且它按应有的方式工作。
您应该使用 "application support directory" - 这通常是 ~/Library/Application Support
或用于沙盒应用程序及其容器中的等效项。
要获取此目录的 URL,您使用 URLForDirectory:inDomain:appropriateForURL:create:error:
作为第一个参数传递 NSApplicationSupportDirectory
。
在此目录中,您需要为您的应用程序创建一个目录,使用您的应用程序的包 ID 是命名此目录的常见策略。
此目录用于存储您的应用程序所需的文件,而不是您用户的文件。
在这篇优秀的文章中,我发现我的答案比在这里提问之前更难谷歌搜索:
https://www.cocoawithlove.com/2009/07/temporary-files-and-folders-in-cocoa.html
阅读文章和各种选项后,我发现缓存目录 (NSCachesDirectory) 是存储文件的正确位置。将它们放在 "Application Support" 将导致它们被时间机器备份。
这就是我所做的:
const char *get_temporary_dir()
{
NSString *path = nil;
NSString *bundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
if ([paths count]) {
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:bundleName];
} else {
path = NSTemporaryDirectory();
path = [path stringByAppendingPathComponent:bundleName];
}
return [path UTF8String];
}
...我不确定是否需要回退到标准的、可删除的目录,但这没有坏处!