在Cocoa中:如何设置读写文件夹的权限?

问题描述 投票:3回答:1

我正在转换图像大小,然后将新文件保存到原始图像文件所在的目录中。

我只能将权限设置为“图像”目录。如果我的应用程序需要选择该目录中的图像,则可以正常工作。如果我选择的图像位于另一个目录(例如用户创建的目录文件夹)中,则不会出现新图像。我在应用程序沙箱中看到的只是“用户选择的文件”目录,“图像”目录,“下载”目录,“图片”目录,“音乐”目录和“电影”目录。

是否可以通过编程方式授予此权限?

cocoa sandbox file-permissions directory-permissions
1个回答
10
投票

您已经对沙盒模型产生了长期的关注;支持将输入文档转换为相同位置的输出文档的应用程序的功能。

Apple通过应用程序NSIsRelatedItemType中的文档类型的Info.plist条目解决了该问题的子集。如果存在此标志并且在多个文档类型条目中存在YES,则当您的应用程序有权访问这些类型之一的文件时,将被授予创建其他任何类型文件的权限。

例如,TextEdit为.txt.rtf.rtfd文件类型设置了此标志,因此,一旦获得对任何这些类型的文件的访问权限,它就可以创建具有相同名称但不具有任何其他类型,无需进一步的用户许可。它启用诸如“转换为纯文本”之类的命令。

从您的问题看来,您没有这样做,而是说将“ image.png”转换为“ image-resize.png”,即更改name而不是type。如果应用程序未从用户那里获得更多权限,则不支持该功能。

您最好的解决方法是,请用户授予其要调整大小的文件所在文件夹的权限。一旦有了应用程序,它就可以在该文件夹中执行任意数量的文件创建-就像您观察到的可以访问某些特殊文件夹的权利一样。

您可以遵循的一个过程是:

1-当需要创建输出文件时,检查应用程序是否可以访问包含文件夹-您可以为此使用access功能(请参见OS X手册第2节,例如终端或在Xcode的文档中搜索访问权限。]

3-(是,我想念2,请参见下文)。如果您没有访问权限,请向用户for包含文件夹请求-抛出一个合适的NSOpenPanel,提示他们选择包含以下内容的文件夹:关于原因的解释。

4-授予访问权限后,[[保存]]-将安全范围内的书签存储到该文件夹​​中的应用程序“应用程序支持”目录中的文件中。您可以在构建缓存时“修剪”缓存-到任何文件夹的书签都不需要在文件系统树中到它下方的任何文件夹的书签。这样可以启用:2-如果您无权访问,请检查已保存书签的缓存,并查看该文件夹是否具有该书签,如果有,请激活它。请注意,此检查是针对文件系统树中包含文件夹或其任何父文件夹的书签。

随着时间的推移使用此过程,您将积累对用户使用的文件夹的访问权限。您应该为用户提供一种清除缓存的方法。

没有听起来那么糟糕! HTH。

© www.soinside.com 2019 - 2024. All rights reserved.