我正在编写一个 OS X 应用程序,它有一个带有预览附件视图的打开面板。
问题是当我选择一个不在具有沙盒权限的文件夹中的文件时,我无法预览它。
在尝试打开文件之前,有什么方法可以判断文件是否会受到沙箱权限的限制?
我已经尝试- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
过NSURL
该类,但即使文件受到保护,它也会返回 true。
我正在编写一个 OS X 应用程序,它有一个带有预览附件视图的打开面板。
问题是当我选择一个不在具有沙盒权限的文件夹中的文件时,我无法预览它。
在尝试打开文件之前,有什么方法可以判断文件是否会受到沙箱权限的限制?
我已经尝试- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
过NSURL
该类,但即使文件受到保护,它也会返回 true。
对于那些希望代码中尽可能少的 Plain-Old-C 行的人:
NSURLIsReadableKey in NSURL - (BOOL)getResourceValue:(out id *)value forKey:(NSString *)key
或者
NSFileManager - (BOOL)isReadableFileAtPath:(NSString *)path
如果沙箱限制了您的访问并且仅仅是 access() 周围的 Cocoa-Wrapper,那么沙箱将导致这些返回 NO。如果沙盒限制您的访问,沙盒将导致这些返回 NO。
推荐的方法是从 URL 中获取路径,转换为 C 字符串,然后调用access
(在 man 的第 2 节中记录)来检查您需要的权限。例如,在大纲中检查读取访问:
#include <unistd.h>
if (access([[url path] UTF8String], R_OK) == 0)
{
// have access rights to read
}