有人知道如何查找特定文件系统位置是否在沙盒下可以访问吗?
我想测试特定文件是否在正常的Powerbox规则下可访问;也就是已经使用打开/保存对话框等添加到power box中。
我能在触发沙盒异常之前做到这一点吗?
我能捕获沙箱异常吗?
最好的问候,
弗兰克
有人知道如何查找特定文件系统位置是否在沙盒下可以访问吗?
我想测试特定文件是否在正常的Powerbox规则下可访问;也就是已经使用打开/保存对话框等添加到power box中。
我能在触发沙盒异常之前做到这一点吗?
我能捕获沙箱异常吗?
最好的问候,
弗兰克
access()
系统调用进行快速且简单的测试,man access
中有详细说明:
#include <unistd.h>
int access(const char *path, int amode);
access()函数检查由path命名的文件对于amode指定的访问权限的可访问性。 amode的值是要检查的访问权限(读取权限的R_OK,写入权限的W_OK和执行/搜索权限的X_OK)或存在性测试F_OK的按位包含OR。路径名path的所有组件都将用于访问权限检查(包括F_OK)。
如果无法找到路径或任何所需的访问模式都无法授予,则返回-1并设置全局整数变量errno以指示错误。 否则,将返回0。
您可以使用以下类似方式使其在Objective-C中更加精美:
typedef enum
{
ReadAccess = R_OK,
WriteAccess = W_OK,
ExecuteAccess = X_OK,
PathExists = F_OK
} AccessKind;
BOOL isPathAccessible(NSString *path, AccessKind mode)
{
return access([path UTF8String], mode) == 0;
}
access()
这样的调用会考虑到沙盒、访问控制列表(ACLs)和传统的 Unix rwx 设置所施加的限制。 - CRD-(BOOL)isAccessibleFromSandbox:(NSString*)path
{
return( access( path.fileSystemRepresentation, R_OK) == 0 );
}