OSX中的标准临时目录

时间:2017-04-06 08:43:24

标签: objective-c c macos path filesystems

我试图找出在我的应用程序的OSX版本中存储临时文件的最佳位置。

明显回答 / tmp 不好,因为它在启动时已清理,我的应用程序可能需要在重启后继续中断作业。

我还尝试使用环境变量 TMPDIR 指向的路径,该路径与 NSTemporaryDirectory()返回的路径相同,它改变了每次启动,如下所示:

/var/folders/wx/p4rqqs8d1ws0wlpx9dkwsh_80000gn/T/

..但此路径的内容也会在启动时删除。

有一个标准路径,我可以放置一些临时文件,适应重启,或者我必须创建自己的解决方案(即〜/ Library / myapplication / temp)?

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

2 个答案:

答案 0 :(得分:2)

在这篇优秀的文章中,我发现我的回答比以前写的要困难得多:

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

阅读文章和各种选项,我发现Caches目录(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];
}

...我不确定是否需要回退到标准的,可删除的目录,但它不会受到伤害!

答案 1 :(得分:0)

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

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

在此目录中,您需要为您的应用程序创建一个目录,使用您的应用程序的捆绑ID是命名此目录的常用策略。

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