2

プログラムがクラッシュしたために FileStream が閉じられていない場合、開いている FileStream はどうなりますか? 自動で閉まりますか?ファイルで何かをしているため、try catch または using で囲むことはできません。開くボタンでファイルを開くようなものです。

private void button1_Click(object sender, RoutedEventArgs e)
{
    fs = new FileStream("Test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);          
}

それから私はそれで何かをします。次に、アプリケーションの終了または終了で、close を実行します。

fs.Close();

しかし、プログラムのクラッシュなど、その間に何かが発生した場合はどうなるでしょうか。適切に閉じられていないため、ファイルにアクセスできませんか? ありがとう。

4

2 に答える 2

3

実際、そのような状況で何が起こるかはわかりません。MSDN は、FileStream クラスについて次のように述べています。

ファイルの一部がロックされた状態でプロセスが終了した場合、または未解決のロックがあるファイルを閉じた場合の動作は未定義です。

于 2015-10-23T07:52:04.943 に答える
0

意図的かどうかにかかわらず、アプリケーションが終了したときに Windows が何をするかを正確に見つけるのは困難です。

MSDN のプロセスの終了に関する記事では、プロセスが終了したときに何が起こるかについて説明しています。

プロセス内の残りのスレッドには、終了のマークが付けられます。
プロセスによって割り当てられたすべてのリソースが解放されます。
すべてのカーネル オブジェクトが閉じられます。
プロセス コードがメモリから削除されます。
プロセスの終了コードが設定されます。
プロセス オブジェクトが通知されます。

少しトピックから外れていますが、コードの特定の部分では がFileStream実装されているため、決定論的なリソースのクリーンアップに関する情報については、 usingIDisposableキーワードを調査する必要があります。

于 2013-08-14T05:26:09.593 に答える