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

の使用についてはいいエッセイstartAccessingSecurityScopedResourceがありましたが、コメントによると、要求されたディレクトリが正しくないことが問題のようです。

必要に応じて、CocoaスタイルのAPIとPOSIXAPIを簡単に切り替えることができます。必要なときにこれを行うことに実際の問題はないはずです。ユーザー固有のディレクトリを取得するには、他の方法で期待するものとは異なる可能性があるため、常にの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 に答える