Не удается удалить файл, созданный mkstemp () в Mac OS X - PullRequest
2 голосов
/ 01 апреля 2010

Очевидно, 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 Ответ

4 голосов
/ 01 апреля 2010

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

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

...