我正在沙盒化我的应用程序而且我遇到了问题,因为我使用的库在修改原始文件时会创建临时文件,例如
当它改变“Hello World.txt”中的内容时,它会在同一目录中创建一个“Hello World_temp.txt”文件,然后当它完成时它将交换这两个文件。
这当然会破坏沙盒规则,因为您只能更改源文件而不是在文件夹中创建其他文件。
我找不到有关如何处理临时文件的任何建议,所以我目前只是在应用程序的容器中创建临时文件,我可以写入然后交换文件。但是,如果应用程序和文件位于不同的磁盘上,那就不太好了,因为它涉及复制而不是移动。
我们是否允许写入临时文件?
致以最诚挚的问候,
谢
答案 0 :(得分:8)
在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...
在这种情况下在沙箱下也不起作用,在这种情况下编写你自己的代码来读/写临时代码。
答案 1 :(得分:1)
NSTemporaryDirectory()
适用于沙盒。 Swift中的示例代码:
let path = "\(NSTemporaryDirectory())temp.txt"
"Hello world".writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)