objective-c - OSX 中的标准临时目录

标签 objective-c c macos path filesystems

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

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

我还尝试使用环境变量 TMPDIR 指向的路径,这与 NSTemporaryDirectory() 返回的路径相同,每次启动都会更改,类似于:

/var/folders/wx/p4rqqs8d1ws0wlpx9dkwsh_80000gn/T/

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

有一个标准路径,我可以在其中放置一些临时文件,以适应重新启动,或者我必须发明自己的解决方案(即 ~/Library/myapplication/temp)?

在 Windows 中,我使用的是 GetTempPath() 并且它按应有的方式工作。

最佳答案

在这篇优秀的文章中,我发现我的答案比在这里提问之前更难谷歌搜索:

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

...我不确定是否需要回退到标准的、可删除的目录,但这没有坏处!

关于objective-c - OSX 中的标准临时目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43250073/

相关文章:

ios - NSURLSession:如何增加 URL 请求的超时时间?

c - 如何静态编译lighttpd模块

C: qsort 对结构体的 unsigned long long 成员进行排序时出现问题

macos - 如何在 virtualbox 上安装 osx sierra(在我的 Mac 上)

macos - NSStatusItem.button (NSStatusBarButton) 的替代方案 OSX 10.9

Java - Mac 应用程序需要安装 JDK 才能运行

ios - 临时免责声明

iOS 7 全屏 Web 应用程序中的 JavaScript 警报损坏了吗?

c - Arduino 中的数据类型错误

iphone - 在 UITableViewController 中重建表格单元格