7

時系列データをファイルに書き込むシステムを設計しています。データは、時間とペイロードの2つの4バイト部分に分割された8バイトのブロックです。

MSDNによると、書き込まれるデータのサイズが1セクター未満の場合、 WriteFile関数はアトミックです( http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx )。

ファイルにはこれらのブロックのみが含まれるため(ファイルの「構造」がないため、破損したファイルを再構築することはできません)、次々に追加されるため、ブロック全体、またはファイルに何も書き込まれないことが重要です。常時。

質問は、実際のwritefileの呼び出し中に何が起こっても、サイズが1セクター未満のwritefileが常に完全にディスクに書き込まれるか、まったく書き込まれないことを正しく理解したかどうかです。

4

1 に答える 1

9

WriteFileは、書き込みがファイル内のセクター境界を越えない限り、アトミックです。したがって、セクターサイズが512バイトの場合、ファイルオフセット0から始まる20バイトの書き込みはアトミックになりますが、ファイルオフセット500に書き込まれる同じデータはアトミックではありません。あなたの場合、セクターサイズは8の倍数でなければならないので、書き込みはアトミックである必要があります。

このMSDNブログには、トランザクションNTFSを使用せずにアトミックマルチセクター書き込みを実行する方法に関する詳細があります。

于 2011-01-13T16:57:41.883 に答える