#cocoa #permissions #directory #nsfilemanager
#cocoa #разрешения #каталог #nsfilemanager
Вопрос:
Следующий код возвращает NSCocoaErrorDomain с кодом ошибки 513 (NSFileWriteNoPermissionError) при запуске из xcode.
NSError *error;
[[NSFileManager defaultManager]
createDirectoryAtPath:@"/Library/Application Support/myapp"
withIntermediateDirectories:YES
attributes:nil
error:amp;error];
Это на Mac OS X 10.6.7, указанный каталог не существует, и мой пользователь имеет права администратора.
Цель состоит в том, чтобы сохранить файлы поддержки приложений, которые являются общими для пользователей. Разве не должны быть разрешения на запись для создания этого каталога?
Ответ №1:
Нет, это системная папка библиотеки. Вам нужна библиотека пользователя в «~/Library/». Вы могли бы попробовать:
[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/myapp"]
или:
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString * appSupportPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myapp"];
Для еще одного варианта вы также можете получить URL-адрес из файлового менеджера:
NSFileManager * fm = [[NSFileManager alloc] init];
NSArray * urls = [fm URLsForDirectory:NApplicationSupportDirectory inDomains:NSUserDomainMask];
NSURL * appSupportURL = [urls objectAtIndex:0];
Комментарии:
1. Ну, это каталог «Application Support», поэтому я не понимаю, почему мое приложение не могло его использовать. Кроме того, я вижу там множество папок из других приложений, которые я установил на свой Mac. Кроме того, идея в том, что я хочу сохранить файлы, которые являются общими для пользователей, поэтому я не использую каталог ~/Library /Application Support .
2. @user497804: пользователь, даже если он администратор, не является владельцем /Library, и поэтому ваше приложение не может писать туда без получения авторизации, что обычно делается путем появления диалогового окна с запросом пользователя на аутентификацию. Я думаю, что вам нужно заглянуть в службы авторизации .