Mac沙箱和临时文件

8
我正在进行应用程序沙盒化的工作,但我遇到了一个问题,因为我使用的库在修改原始文件时会创建临时文件,例如:
当它更改“Hello World.txt”中的内容时,它将在同一目录中创建一个“Hello World_temp.txt”文件,然后完成时它将交换两个文件。
这当然违反了沙盒化规则,因为只允许更改源文件,而不是在文件夹中创建其他文件。
我找不到任何关于如何处理临时文件的建议,所以我目前打算在我被允许写入的应用程序容器中创建临时文件,然后交换文件..但是,如果应用程序和文件位于不同的磁盘上,那么这并不好,因为它需要复制而不是移动。
是否有可以写入的临时文件位置?
最好的问候,
弗兰克
2个回答

9
在10.7.3+(在10.6上也适用),请尝试NSFileManager方法URLForDirectory:inDomain:appropriateForURL:create:error: (文档)。这应该会在特定卷中为您提供一个临时目录。一旦创建,您可以使用replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:来切换文件。
现在有些不确定性:
在10.7 -> 10.7.2中,上述方法可能无法在沙盒中工作。相反,您可以使用函数NSTemporaryDirectory()(文档)。您可能发现,在此情况下,在沙盒中时也不起作用,如果是这种情况,请编写自己的代码来读取/写入临时文件。

3

NSTemporaryDirectory() 在沙盒中工作。以下是 Swift 的示例代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接