gpt4 book ai didi

c# - 该进程无法访问该文件,因为该文件正在被另一个进程使用

转载 作者:行者123 更新时间:2023-12-02 15:39:06 25 4
gpt4 key购买 nike

当我执行下面的代码时,出现常见异常进程无法访问文件 *filePath*,因为它正在被另一个进程使用

允许该线程等待直到可以安全访问该文件的最有效方法是什么?

假设:

  • 该文件刚刚由我创建,因此其他应用程序不太可能访问它。
  • 我的应用中可能有多个线程正在尝试运行此代码以将文本附加到文件。

:

 using (var fs = File.Open(filePath, FileMode.Append)) //Exception here
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}

到目前为止,我想出的最好的方法如下。这样做有什么缺点吗?

    private static void WriteToFile(string filePath, string text, int retries)
{
const int maxRetries = 10;
try
{
using (var fs = File.Open(filePath, FileMode.Append))
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}
}
catch (IOException)
{
if (retries < maxRetries)
{
Thread.Sleep(1);
WriteToFile(filePath, text, retries + 1);
}
else
{
throw new Exception("Max retries reached.");
}
}
}

最佳答案

如果有多个线程尝试访问同一文件,请考虑使用锁定机制。最简单的形式可能是:

lock(someSharedObject)
{
using (var fs = File.Open(filePath, FileMode.Append)) //Exception here
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(text);
}
}
}

作为替代方案,请考虑:

File.AppendText(text);

关于c# - 该进程无法访问该文件,因为该文件正在被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com