在 OS X 中:
我使用 Cocoa API 在用户的桌面上创建一个目录,它工作正常。 但是,如果我使用 POSIX 函数
int mkdir(const char *path, mode_t mode);
在用户的桌面上创建目录,总是失败并返回-1
。
但是我在应用程序域目录中测试了 mkdir()
,它起作用了。
那么,在 OS X 中调用非 Cocoa API 时是否需要更多权限?
解释为什么我需要调用 POSIX API:
我想创建一些带有属性的特殊目录,我搜索使用 setxattr () 会添加我想要的所有属性,但我找不到 Cocoa 的方法来使用 setxattr()
,Cocoa API 中是否有相应的类、方法或函数?
最佳答案
我有一篇关于使用 startAccessingSecurityScopedResource
的好文章,但根据评论,问题似乎是请求的目录不正确。
您可以在需要时轻松地在 Cocoa 风格和 POSIX API 之间切换。在需要时执行此操作应该没有真正的问题。您应该始终使用 [NSFileManager defaultManager]
的 URLsForDirectory
方法来获取用户特定的目录,因为它们可能与您预期的不同。
你应该使用类似于:
NSString *desktopDir = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *urls = [fileManager URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask];
if ([urls count] > 0) {
NSURL *desktopURL = [urls objectAtIndex:0];
NSLog(@"%@", desktopURL);
desktopDir = desktopURL.path;
}
if (desktopDir != nil) {
NSString *xx = [desktopDir stringByAppendingPathComponent:@"/XXX"];
mkdir(xx.UTF8String, 0755);
}
关于c - OS X 中的 POSIX API 是否需要比 Cocoa 更高的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007082/