2017-04-06 84 views
0

我在想什么是在我的应用程序的OSX版本中存储临时文件的最佳位置。OSX中的标准临时目录

明显答案/tmp目录,因为它在启动清理和我的应用程序可能需要重新启动后也继续被中断的工作是不好的。

我也尝试使用环境变量TMPDIR 指出的路径,即通过NSTemporaryDirectory(),改变每一个引导和是一样的东西返回相同:

/var/folders/wx/p4rqqs8d1ws0wlpx9dkwsh_80000gn/T/ 

..而且这个路径的内容在启动时被删除。

有一个标准的路径,我可以放置一些临时文件,恢复弹性,或者我必须发明自己的解决方案(即〜/ Library/myapplication/temp)?

在Windows中,我使用GetTempPath(),它的工作方式应该如此。

回答

2

我发现我的回答询问这里,这个优秀的文章在谷歌上搜索才更努力,我做到了:

https://www.cocoawithlove.com/2009/07/temporary-files-and-folders-in-cocoa.html

阅读的文章和各种选项我发现缓存目录(NSCachesDirectory)是正确的地方存储我的文件。将它们放在“应用程序支持”中将使它们被时间机器备份。

因此,这里是我做过什么:

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]; 
} 

...我不知道,如果退回到标准的,可删除的,需要的目录,但它不会伤害!

0

您应该使用“应用程序支持目录” - 这通常是~/Library/Application Support或沙盒应用程序及其容器内的等效内容。

要获取此目录的URL,请使用URLForDirectory:inDomain:appropriateForURL:create:error:作为第一个参数NSApplicationSupportDirectory传递。

在这个目录中,您需要创建一个仅用于您的应用程序的目录,使用您的应用程序的包ID是命名此目录的常用策略。

此目录旨在存储您的应用程序所需的文件,但不是您用户的文件。