- ベストアンサー
マップトファイルでフラッシュしたのに、フラッシュが実行されない
初めて投稿します。 現在、マップトファイルを使うソフトを開発しています。 一定周期で、マップトファイルをフラッシュしてメモリのデータを保存しています。 プログラムが動いているときは、フラッシュされている事を確認したのです。 ところが、停電でPCが落ちたあとなどに、再起動をしたところ、フラッシュができていないのです。 (できていたが戻される?) OpenFileMapping→FlushViewOfFileでやってます。 UnmapViewOfFileを使わないといけないのでしょうか? 原因、対策方法などわかる方いらっしゃいますか? 教えてください。 ちなみに、WINDOWS2000で、VC++4.0(古い!!)でやってます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お使いのファイルを置いているファイルシステムがNTFSであるか、あるいはネットワークを越えたさきにあるリモートファイルである場合、FlushViewOfFileは単に「ファイルの更新に必要なデータをファイルシステムに送り出す」だけで、実際のファイル更新はファイルシステム側でゆっくりと行われます。 「CreateFileMappingに与えるファイルへのハンドル」をCreateFileで取得しますが、このときdwFlagsAndAttributesパラメータにFILE_FLAG_WRITE_THROUGHを追加しておけば、ファイルシステム側で書き込みデータがバッファリングされずすぐに書き戻されるようです。
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
ディスクに内容が書き終わる前に、停電によりシステムが停止したため、変更がロールバックされただけでは。 ただここで質問しているって事は、停電があった1回限りでなく、以降必ずフラッシュされなくなったという事でしょうから、ファイルシステムに不整合が発生しているか、ハード自体に障害が起きている恐れもあるかと。 chkdskやドライブベンダーが提供している診断ツールを実行してみては。
お礼
早速の回答ありがとうございます。 たしかに、ロールバックされている可能性はありますね。 参考に対策を考えて見ます。
お礼
回答ありがとうございます。 ご指摘のdwFlagsAndAttributesパラメータについては、 明日早速試してみます。