我想在另一个进程中打开一些数据(保存在NSData中)。所以我做了这样的事情(在swift中):
let tempURL = NSURL.fileURLWithPathComponents([NSTemporaryDirectory(), NSUUID().UUIDString + ext])
data.writeToURL(tempURL, options: NSDataWritingOptions.DataWritingAtomic)
NSWorkspace.sharedWorkspace().openURL(tempURL)
如果数据是图像,则ext可能是'jpg'。
我可以看到创建的文件。预览可以很好地打开图像。问题是预览无法保存对文件的更改。根据 ls -l </ strong>和获取信息,该文件肯定是我可写的。在写入之后和预览开始之前立即检查文件上的 lsof ,它不会被任何其他进程保持打开状态。
手动在该文件上运行预览也会导致“无法保存更改”。
临时文件夹(由NSTemporaryDirectory()返回)是:
/var/folders/zt/<random string of alphanum>/T
由于我能够编写文件,因此我不得不猜测临时文件的新OSX安全增强功能意味着只有创建者进程才能写入这些文件。如果我将文件移到我的桌面,我可以打开它,如果我使用硬编码的“/ tmp”作为临时文件夹,一切正常。
根据 man 7 tier ,/ var / folders是:
每用户临时文件和缓存
我无法找到提及临时文件夹中的跨进程安全性。 任何人都知道发生了什么事?
干杯。 保罗