Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos NSFileWrapper writeToURL:失败,错误为“0”;文件已存在";-如何简单地覆盖现有文件?_Macos_Cocoa_Nsfilewrapper - Fatal编程技术网

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