簡體   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