4

ログ ファイルに書き込む StreamWriter オブジェクトがあり、次のように初期化されます。

StreamWriter streamWriter = File.AppendText(GetLogFilePath());
streamWriter.AutoFlush = true;

コードの後半で、ログ ファイルを閉じてから、ログアウトしたコンテンツの一部を読み取る必要があります。次のコードがあります。

streamWriter.Close();
streamWriter = null;
StreamReader logFileStream = File.OpenText(GetLogFilePath());

これは例外をスローしています: 別のプロセスによって使用されているため、プロセスはファイルにアクセスできません。

おそらく問題は、StreamWriter を閉じたときにログ ファイルが正しく閉じられないことです。

StreamWriter を閉じて、開いているファイルが正しく閉じられていることを確認するより良い方法はありますか?

更新: 問題を解決しました。無関係な問題 (アクセスしようとしていたファイルに別のアプリケーションがアクセスしていた) が原因でした。Dmitry Martovoi の回答を受け入れます。これは、将来同様の問題を抱えている他の人にとって最も役立つと思うからです。ただし、このソリューションでは、ログが書き込まれるたびにログ ファイルを開く必要があるため、不要なオーバーヘッドが発生する可能性があることに注意してください。

4

3 に答える 3

8

私は常にそのようなコードをusingステートメントでラップします

using (StreamWriter writer = File.AppendText(path)) 
{
   writer.WriteLine("This");
   writer.WriteLine("is Extra");
   writer.WriteLine("Text");
}

しかし、StreamWriter Closeメソッドは とまったく同じDisposeです。

于 2013-01-22T12:02:06.013 に答える
2

各ファイル操作をusingブロックでラップする必要があります。

using (StreamWriter s = new StreamWriter(/* your arguments here *\)) {
    // code that uses it here
}
// file is closed here
于 2013-01-22T12:03:46.953 に答える
0

File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None); を使用してみてください。

于 2013-01-22T12:02:06.133 に答える