无法删除Mac OS X上由mkstemp()创建的文件

时间:2010-03-31 20:05:05

标签: cocoa macos nsfilemanager mkstemp

显然,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."

我在Snow Leopard上运行它。关于问题发生原因和/或如何解决问题的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:4)

不要使用-URLWithString :,使用-fileURLWithPath:您没有创建有效的文件URL。将路径字符串直接传递给NSFileManager的-removeItemAtPath:当然会更短。

此外,对于文件路径,始终使用-stringWithUTF8String创建路径字符串:。