質問

(iPhone/iPod Touch 上で) 次のように書かれたファイルを使用することは可能ですか:


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

破損する、例:アプリが強制終了されるときは?

私の知っているところによると、fwrite はアトミックな操作であるはずなので、1 つの命令でファイル全体を書き込むときに破損は発生しません。ネット上にはそれ以外の情報は見つかりませんでした。

役に立ちましたか?

解決

fwriteがアトミックであるいつから?私はすべての参照を見つけることができません。とにかく、fwriteは原子することができたとしても、fopenfwriteの間の時間は、のないのアプリがこれらの時刻の間に終了することを余儀なくされている場合、そう、あなたは空のファイルを取得します。

はiPhoneOSのために、あなたしている書き込みとして、あなたは全体のオープン・ライト・クローズ手順がアトミックであることを確認するために-[NSData writeToFile:atomically:]を使用することができます(それは、その後、元のものを置き換える一時ファイルに書き込むことで動作します。)

他のヒント

自分で作業を簡単にして、次のコマンドを使用してデータを書き込むこともできます。 NSデータ を持つクラスwriteToFile:atomically: メソッドがあなたを待っています。生のバッファをラップする NSData 難しいことではありません。 dataWithBytes:length または dataWithBytesNoCopy:length:freeWhenDone: イニシャライザ。

fwriteで書かれた

データがバッファリングされています。だから、突然の終了は、バッファをフラッシュしない場合があります。 fcloseはバッファをフラッシュしますが、これはバイトも私の知る限り(これはOSレベルのキャッシュに)ディスクに書き込まれていることを含意しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top