2

在 OS X 中:

我使用 Cocoa API 在用户的桌面上创建一个目录,它工作正常。但是,如果我使用 POSIX 函数

int mkdir(const char *path, mode_t mode);

在用户的桌面上创建目录,它总是失败并返回-1. 但是我mkdir()在应用程序域目录中进行了测试,并且可以正常工作。那么,在 OS X 中调用非 Cocoa API 时是否需要更多权限?

解释为什么我需要调用 POSIX API:

我想创建一些带有属性的特殊目录,我搜索使用setxattr () 它将添加我想要的所有属性,但是我找不到 Cocoa 使用方式setxattr(),是否有相应的类、方法或函数可可API?

4

1 回答 1

0

我有一篇关于 using 的好文章startAccessingSecurityScopedResource,但根据评论,问题似乎是请求的目录不正确。

当需要时,您可以轻松地在 Cocoa 风格和 POSIX API 之间进行切换。当您需要时,这样做应该没有真正的问题。您应该始终使用 的URLsForDirectory方法[NSFileManager defaultManager]来获取用户特定的目录,因为它们可能与您期望的不同。

您应该使用类似于:

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);
}
于 2012-10-22T10:05:41.887 回答