繁体   English   中英

Mac 沙盒和临时文件

[英]Mac Sandboxing and Temp files

我正在对我的应用程序进行沙盒处理,但我遇到了一个问题,因为我使用的库在修改原始文件时会创建临时文件,例如

当它更改“Hello World.txt”中的某些内容时,它将在同一目录中创建一个“Hello World_temp.txt”文件,然后当它完成时将交换两个文件。

这当然打破了沙盒规则,因为您只能更改源文件,而不能在文件夹中创建其他文件。

我找不到关于如何处理临时文件的任何建议,所以我目前只想在应用程序的容器中创建临时文件,我可以在其中写入然后交换文件..但是,这不是很好如果应用程序和文件在不同的磁盘上,因为这将涉及复制而不是移动。

是否有允许我们写入临时文件的地方?

此致,

坦率

在 10.7.3+(也可以在 10.6 的沙箱外运行)尝试NSFileManager方法URLForDirectory:inDomain:appropriateForURL:create:error: (docs) 这应该为您提供特定卷上的临时目录。 创建后,您可以使用replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:来切换文件。

现在有些不确定:

在 10.7 -> 10.7.2 上,上述方法在沙箱中可能不起作用。 相反,您可以使用函数NSTemporaryDirectory() (docs) 可能会发现,在沙箱下的这种情况下, replaceItemAtUrl...也不起作用,在这种情况下,请编写您自己的代码来读/写临时文件。

NSTemporaryDirectory()在沙箱中工作。 Swift 中的示例代码:

let path = "\(NSTemporaryDirectory())temp.txt"
"Hello world".writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM