IOException创建文件然后尝试访问它时

时间:2013-01-10 12:38:45

标签: c# file-io

  

可能重复:
  File being used by another process after using File.Create()

我有一个将文本附加到文件的方法。在我附加文本之前,我检查文件是否存在。如果它不存在我创建它然后继续如下所示。

if(!File.Exists(_someFile))
    File.Create(_someFile);

using (StreamWriter file = File.AppendText(_someFile))
{          
    file.WriteLine("some text");
}

如果文件存在则没有问题。该文件将被更新。如果该文件不存在并且它被创建,则在使用'using'的行上抛出IO异常,表明另一个进程正在使用该文件。我尝试使用进程资源管理器来找出使用该文件的内容,结果是“不存在的进程”。 有谁知道发生了什么以及如何解决这个问题?

编辑:问题解决了

我第一次搜索时在这个网站上找不到关于我的问题的问题。我一发布问题,就在右边的“相关问题”中看到了确切的问题。 链接到解决方案:File being used by another process after using File.Create() 很抱歉发布了重复内容。 我的问题解决了。

2 个答案:

答案 0 :(得分:6)

这是因为File.Create(_someFile);打开了必须先关闭的文件流,然后才能使用新创建的文件。 试试这个:

if(!File.Exists(_someFile))
{
    using (var stream = File.Create(_someFile))
}
using (StreamWriter file = File.AppendText(_someFile))
{          
    file.WriteLine("some text");
}

但实际上您不需要先检查并创建文件。如果文件不存在,StreamWriter将创建该文件,如果该文件存在,则将其附加到文件中。

using (StreamWriter sw = new StreamWriter(_someFile, true))
{
    file.WriteLine("some text");
}

答案 1 :(得分:1)

弗拉德的回答是正确的。由于你想要创建文件(如果它不存在)并附加到它(如果存在),这里有一个简单的解决方案:

        string _someFile = @"C:\somefile.txt";
        TextWriter tw = new StreamWriter(_someFile, true); // append == true
        tw.WriteLine("some text");
        tw.Close();