【问题标题】:Can I delete a file on the Desktop from a sandboxed Mac app?我可以从沙盒 Mac 应用程序中删除桌面上的文件吗?
【发布时间】:2014-11-28 17:10:02
【问题描述】:

我可以让我的 Mac 应用程序读取桌面的内容,但每当我尝试删除一个文件时,它就会说我没有这样做的权限。如果用户有权访问桌面,我是否应该能够删除文件?

  • 沙盒已开启
  • 文件访问权限设置为用户选择的文件的读/写。
  • 安全范围的书签正在工作,因为我对文件具有读取权限,并且它只出现一次授权提示。

这是我用来删除的代码:

[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation
                                                     source:desktopPath
                                                destination:@""
                                                      files:self.filesToDelete
                                                        tag:nil];

我也尝试过使用 fileManager 的垃圾箱方法,但没有成功。

这是从 fileManager 回收站方法返回的错误:

Error Domain=NSCocoaErrorDomain Code=513 "“file.png” couldn’t be moved to the trash because you don’t have permission to access it." UserInfo=0x60000026a980 {NSURL=file:///Users/me/Desktop/file.png, NSUserStringVariant=(
Trash
), NSUnderlyingError=0x600000257ca0 "The operation couldn’t be completed. (OSStatus error -5000.)"}

以及实际的垃圾方法调用:

[[NSFileManager defaultManager] trashItemAtURL:url resultingItemURL:nil error:&error];

【问题讨论】:

  • 是的,当用户授予您权限并且用户可以手动执行此操作时,您的应用程序 (AFAIK) 也应如此
  • 这就是我的想法,那么为什么我会收到这个错误?如果我可以读取文件,我不应该能够删除它们吗?见上面的错误
  • 不,如果您可以阅读它们并不意味着您可以删除它们。该错误表明没有沙盒错误

标签: macos cocoa sandbox nsfilemanager


【解决方案1】:

除非用户通过打开的对话框选择了文件,或者您通过应用使用保存对话框保存了文件,否则您将无法在沙盒应用中删除它。

您可以在几个目录中执行您想要的操作,主要是 /tmp 和沙盒容器中的目录。

https://developer.apple.com/library/mac/documentation/security/conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html

【讨论】:

  • 感谢您的回答。正如我所提到的,用户确实选择了带有打开对话框的桌面。否则我将无法读取桌面的内容,对吗?如果不让他们选择桌面,枚举器不会返回任何文件。他们选择桌面后,我可以读取桌面,但我无法删除。
  • 是的,我告诉你,除非他们选择了那个特定文件,否则你将无法删除它。您还可以删除自己创建的文件
  • @JonGilkison 那么DaisyDisk 是如何工作的呢?您只需将整个磁盘或单个文件夹放到它的窗口上,它就可以删除其中的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
相关资源
最近更新 更多