【问题标题】:Wait for a file to be created before writing to it在写入文件之前等待创建文件
【发布时间】:2015-05-24 00:18:45
【问题描述】:

我有这个代码:

if (!File.Exists(fileName))
{
    File.Create(fileName);
}
File.WriteAllText(fileName, contents);

但是,每次我运行它都会得到一个 IOException:

在 mscorlib.dll 中发生了“System.IO.IOException”类型的未处理异常

附加信息:该进程无法访问文件“C:\Users\Frankie\Commander\config\freq.txt”,因为它正被另一个进程使用。

如何让 File.WriteAllText() 等到创建完成?

【问题讨论】:

  • 这可能是您的程序的另一个实例从不丢弃文件句柄的问题。尝试重新启动您的 ide 并重试。
  • 我已尝试重新启动 Visual Studio 和我的计算机。当我只运行没有附加 IDE 的 exe 时,它​​也会这样做。
  • 如果这些答案仍然对您不起作用,请尝试将文件复制到另一个文件并删除旧文件,然后重试。

标签: c#


【解决方案1】:

WriteAllText 方法会为您创建文件,所以这就是您所需要的:

if (!File.Exists(fileName))
{
    File.WriteAllText(fileName, contents);
}

如果您不关心可能会覆盖文件,您甚至可以省略File.Exists 检查,因为WriteAllText 将覆盖现有文件。

您的原始代码有问题的原因是File.Create 为文件打开了FileStream,因此将其锁定;您必须先关闭它,然后才能对其进行写入。

【讨论】:

  • 如果我要手动关闭 FileStream,它会让我毫无问题地写入它吗?
【解决方案2】:

创建后关闭文件:

if (!File.Exists(fileName))
{
    File.Create(fileName).Close();
}
File.WriteAllText(fileName, contents);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多