Mac 沙盒和临时文件
Posted
技术标签:
【中文标题】Mac 沙盒和临时文件【英文标题】:Mac Sandboxing and Temp files 【发布时间】:2012-03-21 14:06:17 【问题描述】:我正在对我的应用程序进行沙盒处理,但我遇到了一个问题,因为我使用的库在修改原始文件时会创建临时文件,例如
当它更改“Hello World.txt”中的某些内容时,它将在同一目录中创建一个“Hello World_temp.txt”文件,然后当它完成时它将交换两个文件。
这当然会破坏沙盒规则,因为您只能更改源文件,而不能在文件夹中创建其他文件。
我找不到任何关于如何处理临时文件的建议,所以我目前只是在允许我写入的应用程序容器中创建临时文件,然后交换文件。但是,如果应用程序和文件位于不同的磁盘上,那就不好了,因为这将涉及复制而不是移动。
有允许我们写入临时文件的地方吗?
最好的问候,
弗兰克
【问题讨论】:
【参考方案1】:在 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...
在沙箱下也不起作用,在这种情况下,您可以编写自己的代码来读取/写入临时返回。
【讨论】:
【参考方案2】:NSTemporaryDirectory()
在沙盒中工作。 Swift 中的示例代码:
let path = "\(NSTemporaryDirectory())temp.txt"
"Hello world".writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)
【讨论】:
以上是关于Mac 沙盒和临时文件的主要内容,如果未能解决你的问题,请参考以下文章