2016-12-13 4 views
0

私はこの問題を数回抱いていましたが、これまで満足のいく解決策が見つかっていませんでした。コンピュータを再起動するのは15分かかると面倒です...):ストリームを失ったときにファイルをブロックする方法

ファイルで何かをプログラミングする場合、ファイルストリームを使用する必要があります。それらの問題は(少なくともC#では)別の場所からアクセスする前にファイルを再度リリースする必要があることです。これはたいていの場合よく考えられているように、プログラミングやデバッグの過程でファイルをリリースすることを忘れてしまったり、ストリームが閉じられる前にプログラムがクラッシュしたりしてしまったのは、私にとって数回起こりました。

Windowsの機能などを使用してこれらのストリームを見つけて削除する方法はありますか? C#だけでなくC++(またはC、私はもはや確信していません)のような問題が発生しました。


私が読んだ回答から、ストリームが適切に処理されたときにこれが発生しないようにする必要があります。しかし、もし私がそれを正しく処理するために愚かで、ストリームが(何らかの理由で)適切に閉じられないとすればどうですか? PCの動作中にこれを修正する方法はありますか?

+8

これは問題ではありません。オペレーティングシステムは、プロセスが終了したときに開いていたすべてのファイルハンドルを解放します。アプリケーションが正常に動作しているときは、 'using'ブロックを使用して、これらのようなアンマネージリソースが適切に解放されるようにします。 –

答えて

4

これは問題ではありません。

アプリケーションが正常に実行されている場合は、usingブロックを使用して、これらのような管理されていないリソースが適切に解放されるようにします。これは、IDisposableインターフェイスを実装するオブジェクトに必要です。

これが失敗すると、オペレーティングシステムが起動してベーコンを保存します。 OSは、プロセスが終了したときに開いていたファイルハンドルを自動的に解放するため、アプリケーションがクラッシュしても問題はありません。 (ストリームを含む)IDisposableインタフェースを実装

3

常にusingブロックで囲まれ又は順番にIDisposable自体を実装(および新しいDispose()方法も呼ぶクラスのメンバーでなければならないのいずれかでメンバーのDispose()メソッド)。これにはコンパイラの警告が必要です。

これを行い、ファイルロックが適切に解放されます。