2010-03-31 1 views
2

По-видимому, NSFileManager не может удалить файлы, созданные mkstemp(). Вот некоторые тестовый код, чтобы продемонстрировать это:Не удается удалить файл, созданный mkstemp() в Mac OS X

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." 

Я бегу это на Snow Leopard. Любые идеи о том, почему возникает проблема и/или как ее обойти?

Спасибо!

+0

Оказалось, что использование функции unlink() действительно работает, поэтому, по-видимому, это проблема с NSFileManager. – splicer

ответ

4

Не использовать -URLWithString :, use -fileURLWithPath: вы не указали допустимый URL-адрес файла. Передача строки пути непосредственно в NSFileManager's -removeItemAtPath: будет, конечно, короче.

Кроме того, для путей к файлу всегда создавайте строку пути с помощью -stringWithUTF8String :.

+0

Спасибо, Райнер! Это сделало трюк :) – splicer

 Смежные вопросы

  • Нет связанных вопросов^_^