File.ReadAllLines()紧随其后的File.WriteAllLines()由于锁定导致异常

本文关键字:File 于锁定 锁定 异常 ReadAllLines WriteAllLines | 更新日期: 2023-09-27 18:07:19

在我的程序中,我有一段代码

var lines = File.ReadAllLines(myFileName);
if (lines[0] != null)
{
    //does a few things
    File.WriteAllLines(myFileName, lines);
}

虽然这一开始工作得很好,但最近它给了我一个异常,因为文件被另一个进程使用~90%的时间。这对我来说已经没有意义了,因为File.ReadAllLines()应该在阅读后关闭文件。我在File.WriteAllLines()之前添加了System.Threading.Thread.Sleep(3000),这将我的成功率提高到了~50%。睡觉和祈祷真的是我唯一的选择吗?我找不到任何人在File.ReadAllLines()上有类似问题的来源。

任何建议、解释或实际修复都会有所帮助。我忍不住觉得我错过了什么。

EDIT:用实际代码编辑我的if语句,如果它重要的话

编辑:我正在读写文件到网络共享,而不是我的本地机器。

编辑:它似乎不是我的应用程序持有文件的任何类型的挂起版本,从我可以通过使用这个问题中的FileUtil类来判断,这是我的应用程序对文件有一个锁定。

File.ReadAllLines()紧随其后的File.WriteAllLines()由于锁定导致异常

我已经弄清楚问题是什么了。在此代码之前,有一些较旧的"遗留"代码可以快速读取文件,原因现在已经过时了。我们的许多遗留代码对流的使用非常草率,我最近一直在清理它,并在没有使用它的地方实现适当的using()语法。显然我漏掉了一个点,并且有一个从未处理过的旧StreamReader。感谢大家的评论,在这个过程中学到了一些东西。