を使用してファイル パッケージを保存する最も効率的な方法を見つけようとしていますNSFileWrapper
。
ファイル ラッパーを保存するときは、アトミックな書き込みを使用せず、前のコンテンツの URL を渡します。
ただし、2 回目の書き込みは常に次のエラーで失敗します。
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
もちろん、ファイルは 2 回目に存在します。2 回目に保存するからです。私が期待するのは、内容が変更されていないため、実際に何も書き出さなくても保存が成功することです。
上記のコードは flag を使用すると機能しNSFileWrapperWritingAtomic
ますが、これは最初に内容全体を一時ファイルに書き込むことになります。これは避けたいことです。ファイルのハードリンクを使用して書き込みを行ったとしても、ファイルパッケージ内のディレクトリが変更され、他の副作用が発生します (実際にはファイルは変更されず、ディレクトリ inode のみが変更されますが、iCloud レポートは変更されます)。
ファイルラッパーが既存のファイルを非アトミックに単純に上書きするためのフラグのようなものはありませんか?