为什么我得到FileNotFoundException,而文件确实存在

本文关键字:文件 存在 FileNotFoundException 为什么 | 更新日期: 2023-09-27 18:18:24

我有一个FileSystemWatcher,它跟踪是否创建了一个新文件。如果是,我有一个方法读取文件并做一些事情…
在下面的代码中,我得到了一个FileNotFoundException,但路径/文件确实存在!我已经检查了路径,文件名等。不知道为什么它找不到文件。
同样在调试模式下,我验证了path变量有正确的路径,但是当我强迫它继续时,不知何故它运行了,但不幸的是在发布模式下它停止了。

using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.Default))
{ 
    //my code
}

得到的错误是

类型为'System.IO.FileNotFoundException'的未处理异常附加信息:无法找到文件"myPathHere

有人能帮忙吗?

为什么我得到FileNotFoundException,而文件确实存在

FileSystemWatcher告诉您何时创建文件,是的。但这并不意味着到那时文件已经完成了写入——当然不是这样。当您逐步执行代码时,您就给了另一个进程编写和关闭文件所需的时间——最终,这是一个并发问题,而在调试时,并发问题往往很难重现。同样的,当你开始手动检查时,文件早就完成了——问题出在时间上。遗憾的是,没有办法使用FileSystemWatcher在文件关闭时给您一个提示(因此,准备由您的应用程序使用)。

您需要等待,直到文件实际完成-一个简单的循环尝试打开文件,并在失败时等待一点应该足够工作:)