【问题标题】:IOException When creating file and then trying to access it [duplicate]IOException创建文件然后尝试访问它时[重复]
【发布时间】:2013-01-10 12:38:45
【问题描述】:

可能重复:
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");
}

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

编辑:问题已解决

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

【问题讨论】:

    标签: c# file-io


    【解决方案1】:

    这是因为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");
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-12-03
        • 2012-08-05
        • 1970-01-01
        • 2013-12-27
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多