另一个进程使用的StreamWriter / StreamReader文件

时间:2013-01-22 11:57:17

标签: c# streamreader streamwriter

我有一个StreamWriter对象要写入日志文件,它初始化如下:

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

稍后在我的代码中,我需要关闭日志文件,然后读取部分已注销的内容。我有以下代码:

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

这是一个例外: 该进程无法访问该文件,因为该文件正由另一个进程使用。

据推测,问题是当我关闭StreamWriter时未正确关闭日志文件。

是否有更好的方法可以关闭StreamWriter以确保其已打开的文件已正确关闭?

更新:我已经解决了我的问题。它是由一个无关的问题(一个单独的应用程序正在访问我试图访问的文件)引起的。 我接受Dmitry Martovoi的回答,因为我认为这对将来有类似问题的其他人最有用;但重要的一点是,解决方案确实需要在每次写入日志时打开日志文件,这可能会导致不必要的开销。

3 个答案:

答案 0 :(得分:7)

我总是将这些代码包装在using语句中

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

StreamWriter Close方法与Dispose完全相同。

答案 1 :(得分:2)

您应该将每个文件操作包装在using块中:

using (StreamWriter s = new StreamWriter(/* your arguments here *\)) {
    // code that uses it here
}
// file is closed here

答案 2 :(得分:0)

尝试使用File.Open(fileName,FileMode.Open,FileAccess.Read,FileShare.None);