Не удается удалить файл, созданный mkstemp() в Mac OS X
По-видимому, NSFileManager
не может удалить файлы, созданные mkstemp()
, Вот некоторый тестовый код, чтобы продемонстрировать это:
char pathCString[] = "/tmp/temp.XXXXXX";
int fileDescriptor = mkstemp(pathCString);
if (fileDescriptor == -1) {
NSLog(@"mkstemp failed");
} else {
close(fileDescriptor);
NSURL *url = [NSURL URLWithString:[NSString stringWithCString:pathCString encoding:NSASCIIStringEncoding]];
NSLog(@"URL: %@", url);
NSError *error;
if (![[NSFileManager defaultManager] removeItemAtURL:url error:&error]) {
NSLog(@"could not delete file: %@", error);
}
}
Вот что я вижу в журнале, когда запускаю приведенный выше код:
URL: /tmp/temp.A7DsLW
could not delete file: Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x1001108a0 "The file “temp.A7DsLW” doesn’t exist."
Я управляю этим на Снежном Барсе. Любые идеи о том, почему проблема возникает и / или как обойти это?
Спасибо!
1 ответ
Решение
Не используйте -URLWithString:, используйте -fileURLWithPath: вы не указали действительный URL файла. Передача строки пути непосредственно в -removeItemAtPath NSFileManager, конечно, будет короче.
Кроме того, для путей к файлам всегда указывайте строку пути с помощью -stringWithUTF8String:.