【问题标题】:Can't delete a file created by mkstemp() on Mac OS X无法在 Mac OS X 上删除由 mkstemp() 创建的文件
【发布时间】:2011-02-03 02:34:37
【问题描述】:

显然,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 上运行它。关于为什么会出现问题和/或如何解决问题的任何想法?

谢谢!

【问题讨论】:

  • 事实证明使用 unlink() 确实有效,所以显然这是 NSFileManager 的问题。

标签: cocoa macos nsfilemanager mkstemp


【解决方案1】:

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

另外,对于文件路径,始终使用 -stringWithUTF8String: 来制作路径字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2013-01-05
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多