在Cocoa中,即在OS X上,我想取消用户在沙盒环境下在NSOpenPanel
中选择的符号链接。
我写的代码如下:
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
openPanel.resolvesAliases = NO;
openPanel.canChooseDirectories = NO;
openPanel.allowedFileTypes = @[(NSString *)kUTTypeSymLink];
[openPanel beginSheetModalForWindow:[[self view] window]
completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSFileHandlingPanelCancelButton) { return; }
int status = unlink(openPanel.URL.fileSystemRepresentation);
if (status < 0) {
NSLog(@" failed unlinking symbolic link at %s", openPanel.URL.fileSystemRepresentation);
}
}];
将NO
设置为resolvesAliases
属性非常有效,以便不解析符号链接。因此,openPanel.URL
返回用户在openPanel中选择的正确位置。
但是,unlink
命令失败,状态为-1
,因为PowerBox没有为用户选择的URL提供符号文件的写入权限。
我当然将com.apple.security.files.user-selected.read-write
密钥与YES
添加到我的权利文件中。除此之外,我还使用Xcode 6.4 + OS X 10.10 SDK,并在OS X 10.10.5上运行。
如何成功取消链接我允许用户选择的符号链接? 或者,根本无法取消沙盒环境下的符号链接?
[注意]在这种情况下,我无法用OS X的别名或UNIX的硬链接替换符号链接。它必须是一个象征性的链接。