如何检测沙盒应用程序中的NSURL是否可访问?

4

我正在编写一个OS X程序,它有一个带有预览附件视图的打开面板。

问题在于,当我选择一个不在有沙盒权限的文件夹中的文件时,我无法预览它。

有没有办法在尝试打开文件之前告诉文件是否会受到沙箱权限的限制?

我已经尝试了- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error NSURL类,但是即使文件受保护它也会返回true。

2个回答

9

对于那些喜欢在代码中尽可能减少平凡的C语言行数的人:

NSURLIsReadableKey  in NSURL - (BOOL)getResourceValue:(out id *)value forKey:(NSString *)key 

或者说

NSFileManager - (BOOL)isReadableFileAtPath:(NSString *)path

如果沙箱限制了您的访问,这些代码将返回NO,因为它们只是围绕access()的Cocoa封装器。如果沙箱限制了您的访问,则这些代码将返回NO。

这将检查“当前进程是否可以读取”。如果当前进程是其他进程呢? - user10063119
@ankii 这就是沙盒的目的,没有其他进程可以干扰。 - mahal tertin
一个应用程序等于一个进程吗?一个应用程序可以有多个进程吗(比如子进程)? - user10063119
最好您在一个新问题中询问,@ankii。 - mahal tertin

4
推荐的方法是从URL获取路径,转换为C字符串,然后调用access(在man的第2节中记录)来检查所需的权限。例如,大致检查读取权限的步骤如下:
#include <unistd.h>

if (access([[url path] UTF8String], R_OK) == 0)
{
   // have access rights to read
}

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