1

可能重复:
文件在使用 File.Create() 后被另一个进程使用

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

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

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

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

编辑:问题已解决

当我第一次搜索时,我在这个网站上找不到关于我的问题的问题。一旦我发布了我的问题,我就在右侧的“相关问题”中看到了确切的问题。指向解决方案的链接:使用 File.Create() 后,另一个进程正在使用文件 抱歉发布重复项。我的问题解决了。

4

2 回答 2

7

发生这种情况是因为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");
}
于 2013-01-10T12:46:18.957 回答
1

弗拉德的回答是正确的。由于您想在文件不存在时创建文件并在文件存在时附加到它,所以这是简单的解决方案:

        string _someFile = @"C:\somefile.txt";
        TextWriter tw = new StreamWriter(_someFile, true); // append == true
        tw.WriteLine("some text");
        tw.Close();
于 2013-01-10T13:04:36.177 回答