C#文件被另一个进程使用

时间:2015-09-23 21:13:23

标签: c# streamwriter

我正在尝试编写一个日志文件,但它经常说"文件被另一个进程使用"。这是我的代码:

//_logFile = "system.log"
if(!File.Exists(Path.Combine("logs", _logFile)))
        {
            File.Create(Path.Combine("logs", _logFile)).Close();
            sw = File.AppendText(Path.Combine("logs", _logFile));
        }
        else
        {
            sw = File.AppendText(Path.Combine("logs", _logFile));
        }         

当我运行它时,它指向File.Create(Path.Combine("logs", _logFile)).Close()行并给出错误。

修改 我将if(!File.Exists(_logFile))更改为if(!File.Exists(Path.Combine("logs", _logFile)))但我仍然遇到同样的错误。

1 个答案:

答案 0 :(得分:3)

假设您不需要在此方法的上下文之外访问此流,我会将您的代码重构为:

var filePath = Path.Combine("logs", _logFile);

using (var sw = File.AppendText(filePath))
{
    //Do whatever writing to stream I want.
    sw.WriteLine(DateTime.Now.ToString() + ": test log entry");
}

这样,无论using块内发生了什么,您都知道该文件将被关闭,以便您以后再次使用它。

请注意File.AppendText如果文件尚未存在,则会创建该文件,因此不需要File.Create