1

StreamReader を使用してテキスト ファイルからデータを読み取る C# コードがいくつかあります。あるコンピューターでは、テキスト ファイルが削除された後、または別のテキスト ファイルに置き換えられた後でも、テキスト ファイルからデータを読み取ることができます。File.Exists 呼び出しは、Windows エクスプローラーに存在しない場合でも、ファイルが存在することを報告します。ただし、別のコンピューターでは、この動作は発生しません。どちらのコンピュータも Vista Business と .NET 2.0.50727 SP2 を実行しています。

解決せずにマシンを再起動しようとしました。

これがどのように可能になり、可能な解決策についての情報を理解している人はいますか?

ありがとう、アラン

4

3 に答える 3

4

MSDNから

Exists メソッドは、パスの検証には使用しないでください。このメソッドは、パスで指定されたファイルが存在するかどうかを確認するだけです。
Exists メソッドを呼び出してからファイルに対して別の操作 (削除など) を実行するまでの間に、別のプロセスがファイルに対して何かを実行する可能性があることに注意してください。推奨されるプログラミング方法は、例に示すように、Exists メソッドとファイルに対して実行する操作を try...catch ブロックでラップすることです。これは、潜在的な競合の範囲を狭めるのに役立ちます。Exists メソッドは、ファイルが使用可能であることを確認するのに役立ちますが、それを保証することはできません。

于 2009-09-01T11:22:13.007 に答える
2

これはフォルダの仮想化の問題でしょうか?

于 2009-09-01T11:20:40.607 に答える
0

ファイルは削除される前に読み取り用に開かれていますか? そうである場合、ファイルシステムが別の方法で解放した後でも、開いているファイルから読み取ることができることは予想外ではありません。

RE: File.Exists():

File.Exists本質的に競合状態になりやすい。何らかの操作を実行する前に、ファイルが存在するかどうかを確認するための排他的な方法として使用しないでください。この間違いは、多くの場合、ソフトウェア内にセキュリティ上の欠陥をもたらす可能性があります。

むしろ、開いている実際のファイル操作などからスローされる可能性のある例外を常に処理し、開いたら入力を確認してください。

于 2009-09-01T11:27:11.153 に答える