writeToFile:atomically:データを上書きしますか?


92

本当に簡単な質問ですが、Appleのドキュメントでは明確になっていないようです。

ウィルwriteToFile:atomically:のためNSDataNSArrayファイルの上書きなどの既存のデータ?

回答:


212

はい。そうなる。

以下は、30文字の制限を超える文字です。


20
アトミックに行うかどうかは関係ありません。どちらの場合も、ファイルは新しいデータで完全に上書きされます。
BJホーマー

ああ、でも私にとっては失敗し、元のファイルはそのままです。writeToFileはNSErrorを返さないので、どのように失敗を調査できますか?権限の問題かもしれませんが、確信が持てません。私のコードは、ルート権限を必要とするインストールパッケージのインストーラプラグインバンドルとして実行されます-コードの実行に使用される権限を確認/印刷する方法がわかりません。
Motti Shneor 16

1
@MottiShneor代わりに-writeToURL:options:error:を使用できますが、これにはエラーパラメータがあります。
BJホーマー

6

メソッドは、YESまたはNOにかかわらず、writeToFile:atomically: 常にOVERWRITE FILEatomically:です。

Apple docsからの情報(NSData、セクション「データの保存」):

NSDataクラスとそのサブクラスは、内容をディスクにすばやく簡単に保存するメソッドを提供します。データ損失のリスクを最小限に抑えるために、これらの方法には、データをアトミックに保存するオプションがあります。アトミック書き込みは、データが完全に保存されるか、完全に失敗することを保証します。アトミック書き込みは、データを一時ファイルに書き込むことから始まります。この書き込みが成功した場合、メソッドは一時ファイルを最終的な場所に移動します。

ファイルが存在するかどうかの確認について一言もありません。

たとえば、そのようなチェックについて具体的に記述されcopyItemAtPath:toPath:error:ドキュメント(NSFileManager、セクションディスカッション)のメソッドの場合:

同じ名前のファイルがdstPathにすでに存在する場合、このメソッドはコピーの試行を中止し、適切なエラーを返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.