C#创建文件后无法立即访问文件

时间:2019-03-26 10:49:50

标签: c# file race-condition streamwriter

我有一种情况,我需要检查txt文件是否存在,如果不存在,则需要创建它。

此后,我需要在文件中填充一些文本。

这是我的代码的样子:

if (!File.Exists(_filePath))
{
    File.Create(_filePath);
}

using (var streamWriter = File.AppendText(_filePath))
{
    //Write to file
}

仅当必须创建一个新文件时,我才在第5行收到一个异常(System.IO.IOException)。例外:

The process cannot access the file '**redacted file path**' because it is being used by another process.

我不想添加类似Thread.Sleep(1000);之类的东西,因为这是一个糟糕的解决方案。

是否有办法找出文件何时再次可用,以便我可以对其进行写入?

3 个答案:

答案 0 :(得分:5)

只需将StreamWriter与参数append = true一起使用。如有需要,它将创建文件。

using (StreamWriter sw = new StreamWriter(_filePath, true, Encoding.Default))
{
   sw.WriteLine("blablabla");
}

答案 1 :(得分:4)

您是如此接近,只需删除第一个ifFile.AppendText就会为您解决问题,并在不存在的情况下创建文件。

using (var streamWriter = File.AppendText(_filePath))
{
    //write to file
}

答案 2 :(得分:2)

FileCreate方法返回Filestream,应在使用StreamWriter之前将其关闭

if (!File.Exists(_filePath))
{
// close fileStream
    File.Create(_filePath).Close();
}

using (var streamWriter = File.AppendText(_filePath))
{
    //Write to file
}