大まかに言えば、アプリケーションの状態を含むファイルがあります。同じスレッドで読み取り/書き込み/書き込み/切り捨て機能を維持したままファイルをロックしますか?
私は次のような動作を実装します:アプリケーションが起動されると、他のアプリケーション(またはユーザー自身)ようにファイルをロック
- はそれを変更することができるようになります。
- ファイルから前のアプリケーション状態を読み取ります。
- ... do work ...
- ファイルを新しい状態で更新します(ファイルの書式では、ファイル全体を書き換えますが、操作後にファイルの長さが短くなる場合があります)。
- ...仕事を...
- は もう一度
- をファイルを更新...作業を行う...
- 仕事は(アプリケーションがクラッシュした)失敗した場合は、ロックが外され、およびコンテンツ以前の作業単位が実行された後の状態になります。
ファイルを書き換えるには、Truncate
オプションを使用してファイルを開く必要があります。つまり、ファイルを書き換えるたびに新しいFileStream
を開く必要があります。 ;その後、がFileShare.Read
でFileStream
を開く、ファイルを読み込むと、アプリケーションが起動されると
- :だから、私が欲しいという行動が唯一、このような汚い方法によって達成できたようです
- 作業が完了したら、前に開いたハンドルを閉じ、別の
FileStream
をFileMode.Truncate
とFileShare.Read
で開き、データを書き込み、FileStream
をフラッシュします。 - 作業が完了したら、前に開いたハンドルを閉じ、別の
FileStream
をFileMode.Truncate
とFileShare.Read
で開き、データを書き込み、FileStream
をフラッシュします。 Dispose
には、以前に開いたハンドルを閉じます。
このようなやり方にはいくつかの欠点があります。余分なFileStream
が開かれます。ファイルの完全性は、FileStream
が閉じてからFileStream
が開かれるまで保証されません。コードははるかに複雑です。 これらの欠点がない他の方法はありますか?
'FileStream.SetLength'はまさに私が探していたものです! – penartur