Cocoa 拖动跟踪期间的读/写访问、POSIX权限和沙箱

Cocoa 拖动跟踪期间的读/写访问、POSIX权限和沙箱,cocoa,posix,sandbox,Cocoa,Posix,Sandbox,我遇到了一个问题,我试图确定在拖动跟踪期间目录是否具有写入权限,但调用NSFileManager.isWritableFileAtPath之类的方法不起作用,因为它们返回沙盒下的写入权限。当拖动完成时,当前进程(我的应用程序)将假定对目录的正常访问(由POSIX权限决定),但我需要提前知道实际权限是什么,以便在拖动操作光标中反映这一点 我找到了如何使用NSFileManager获取POSIX权限,但我无法找到如何从值中读取写入权限部分(该值返回为十进制,如420)。我以为会有一些简单的位屏蔽或帮

我遇到了一个问题,我试图确定在拖动跟踪期间目录是否具有写入权限,但调用NSFileManager.isWritableFileAtPath之类的方法不起作用,因为它们返回沙盒下的写入权限。当拖动完成时,当前进程(我的应用程序)将假定对目录的正常访问(由POSIX权限决定),但我需要提前知道实际权限是什么,以便在拖动操作光标中反映这一点

我找到了如何使用NSFileManager获取POSIX权限,但我无法找到如何从值中读取写入权限部分(该值返回为十进制,如420)。我以为会有一些简单的位屏蔽或帮助函数来转换值,但我在任何地方都找不到它们


感谢您的帮助。

\define
可在包含文件
中找到-请参阅本手册第2节中的
chmod
。整数420是rw-r--r--r/w,由所有者读取其他所有人。

我看到了defines和read man chmod,但我仍然不明白如何从任何整数(如420)派生出单个写入所有者掩码。例如,有“S_IWUSR 0000200”。这是否意味着任何数字的第三位数字如果是“2”就可以由用户写入?谢谢。
#define
常量是您在问题中提到的位掩码。使用按位and操作等来测试个人权限,例如,
如果((权限&S_IWUSR)!=0).
谢谢,我现在知道了,但我认为沙盒返回的权限与我在Finder中看到的不一样。例如,/Developer返回509(从NSFilePosixPermissions属性键),其中S_IWUSR表示不写,即使Finder表示读/写(stat/Developers表示drwxrwxr-x)。这意味着我甚至不知道如何获得沙箱之外的原始权限。509十进制是1FD十六进制或1111111 01二进制-即rwxr-x。S_IWUSR是0000200八进制或010000000二进制。使用
&
,按位和这些,您将得到010000000,这是非零-在本例中表示用户写入权限。我不确定我在这里得到的值是否正确。“stat/System”返回所有者可写的“drwxr-xr-x”,对吗?我得到了整数493(八进制755),它是所有者可写的(按位使用S_IWUSR确认这一点),但Finder get info窗口显示为只读,我肯定无法写入此目录。我想这就是为什么我感到困惑的原因。您的/系统也是这样吗?谢谢