1

次のように書かれたファイルは (iPhone/iPod Touch で) 可能ですか?


if (FILE* file = fopen(filename, "wb")) {
    fwrite(buf, buf_size, 1, file);
    fclose(file);
}

アプリが強制終了されたときなど、破損することはありますか?

私が知っていることから、 fwrite はアトミック操作である必要があるため、ファイル全体を1つの命令で書き込んでも破損は発生しません。そうではないと言う情報をネット上で見つけることができませんでした。

4

3 に答える 3

1

自分で物事を簡単にし、待機中のメソッドを持つNSDataクラスを 使用してデータを書き込むことができwriteToFile:atomically:ます。生バッファをラップするのNSDataは難しくありません.dataWithBytes:lengthまたはdataWithBytesNoCopy:length:freeWhenDone:初期化子があります.

于 2010-03-21T12:47:41.537 に答える
1

で書き込まれたデータfwriteはバッファリングされます。そのため、突然の終了によってバッファがフラッシュされない場合があります。fcloseバッファをフラッシュしますが、これはバイトがディスクにも書き込まれることを意味するものではありません(OSレベルのキャッシュのため)AFAIK.

于 2010-03-21T12:48:00.513 に答える
1

fwriteアトミックはいつから?参照が見つかりません。とにかく、fwriteアトミックにできるとしても、 と の間の時間はfopenfwriteないため、これらの時間の間にアプリが強制終了されると、空のファイルが取得されます。

iPhoneOS用に書いているので、-[NSData writeToFile:atomically:]open-write-close手順全体がアトミックであることを確認するために使用できます(一時ファイルに書き込み、元のファイルを置き換えることで機能します)。

于 2010-03-21T12:48:26.363 に答える