Macos NSFileWrapper writeToURL:失败,错误为“0”;文件已存在";-如何简单地覆盖现有文件?
我试图找出使用Macos NSFileWrapper writeToURL:失败,错误为“0”;文件已存在";-如何简单地覆盖现有文件?,macos,cocoa,nsfilewrapper,Macos,Cocoa,Nsfilewrapper,我试图找出使用NSFileWrapper保存文件包的最有效方法 当我保存文件包装器时,我不会使用原子写入并提交以前内容的URL 但是,第二次写入总是失败,错误为:“Code=516”无法将文件“test.package”保存在文件夹“tempfolder”中,因为已存在同名文件 当然,文件第二次存在,因为我正在第二次保存它。我希望保存成功,而实际上不必写任何东西,因为内容没有更改 当我使用标志NSFileWrapperWritingAtomic时,上面的代码可以工作,但这将首先将整个内容写入临时
NSFileWrapper
保存文件包的最有效方法
当我保存文件包装器时,我不会使用原子写入并提交以前内容的URL
但是,第二次写入总是失败,错误为:“Code=516”无法将文件“test.package”保存在文件夹“tempfolder”中,因为已存在同名文件
当然,文件第二次存在,因为我正在第二次保存它。我希望保存成功,而实际上不必写任何东西,因为内容没有更改
当我使用标志NSFileWrapperWritingAtomic
时,上面的代码可以工作,但这将首先将整个内容写入临时文件,这是我希望避免的。即使写入使用文件的硬链接,文件包中的目录也会更改,从而导致其他副作用(iCloud报告更改,但实际上没有任何文件更改,只有目录索引节点)
难道没有某种标志让文件包装器简单地非原子地覆盖现有文件吗?您可以复制NSDocument的安全保存以执行您想要的操作,而不使用该标志。只需先写入临时文件(这将只写入已更改的文件,并将硬链接其他所有文件)如果使用NSFileManager的成功地将临时文件移动到原始URL,那么使用这种方法,文件包装器仍然会有新的文件夹(这些文件夹不能硬链接)。因此,即使没有更改,文件包装器中的内部子文件夹仍然会更改(不同的更改日期+索引节点)。
NSError *error;
[wrapper writeToURL:fileURL options:0 originalContentsURL:fileURL error:&error];
STAssertNil(error, @""); // First time works (new file)
// Write a second time without changes
[wrapper writeToURL:fileURL options:0 originalContentsURL:fileURL error:&error];
STAssertNil(error, @""); // Fails with error 516, file already exists