Неизвестная ошибка при создании файла в цели c - PullRequest
2 голосов
/ 03 апреля 2011

Я создаю приложение для Mac, которому нужно создать файл с содержимым другого файла, я создаю его следующим образом:

NSString *p = @"/AfilethatEXISTS.plist";
NSString *user1 = @"~/Library/MyApp/myFile";
    NSString *pT1 = [user1 stringByExpandingTildeInPath];
    [[NSFileManager alloc] createFileAtPath:[NSURL URLWithString:pT1] contents:[NSData dataWithContentsOfFile:p] attributes:nil];

Однако, не возвращая ошибки, это не создает файл?

Ответы [ 2 ]

6 голосов
/ 03 апреля 2011

В этом коде есть несколько ошибок, но недостаточно контекста, чтобы сказать вам, что идет не так.

Во-первых, никогда не должно быть файла в / напрямую.Этот каталог должен быть священным, и многие пользователи не смогут писать в этот каталог без доступа администратора.

Во-вторых, пути должны управляться через API-интерфейсы манипулирования путями в NSString и NSURL.

ДалееpT1 на самом деле не URL, а URLWithString: может возвращать ноль.Вместо этого используйте fileURLWithPath:.

Наконец, в этом коде нет проверки ошибок, и, таким образом, невозможно определить, как вы могли обнаружить ошибку.Что вы проверили?

2 голосов
/ 03 апреля 2011

Во-первых, вы неправильно создаете экземпляр файлового менеджера. Чтобы создать новый экземпляр, вам нужно как выделить, так и инициализировать его.

Вы пытаетесь передать объект NSURL, который не будет создан правильно, поскольку строка, которую вы используете для его создания, не является URL-адресом. Но это все равно не имеет значения, потому что даже если NSURL был создан, -createFileAtPath: contents: attribute: ожидает NSString - просто передайте pT1 напрямую.

Еще лучше, поскольку вы просто копируете p в pT1, используйте для этого метод NSFileManager. Он не только концептуально лучше подходит, но и дает вам возможность изучить возвращенный объект NSError, чтобы увидеть, что (если что-то) пошло не так.

NSError *error;
NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
if (![fm copyFileAtPath:p toPath:pT1 error:&error]) {
    // If copyFileAtPath:toPath:error: returned FALSE, an error occurred, and
    // error will point to an NSError instance with more information
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...