【问题标题】:Why I'm getting FileNotFoundException while the file does exist为什么我在文件确实存在时收到 FileNotFoundException
【发布时间】:2015-10-20 16:19:27
【问题描述】:

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

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

我得到的错误是

“System.IO.FileNotFoundException”类型的未处理异常 发生在 mscorlib.dll 中附加信息:找不到文件 'myPathHere

有人可以帮忙吗?

【问题讨论】:

标签: c# streamreader filenotfoundexception


【解决方案1】:

FileSystemWatcher 告诉您文件何时创建,是的。但这并不意味着文件到那时就完成了写入——它肯定不是。当您单步执行代码时,您正在给另一个进程写入和关闭文件所需的时间 - 最后,这是一个并发问题,并且在调试时并发问题往往难以重现。同样,当您手动检查时,文件早已完成 - 问题出在时间上。遗憾的是,无法在文件关闭时使用FileSystemWatcher 给您提示(因此,您的应用程序可以使用)。

您需要等到文件真正完成 - 一个简单的循环尝试打开文件并在失败时稍等片刻应该可以正常工作:)

【讨论】:

  • 我认为你是对的,暂时无法识别文件夹。我会检查您的解决方案并回复您
  • 所以,您的建议对我帮助很大。我在 fileSystemWatcher 中放入了一个 if (File.Exists(e.FullPath)){ myMethod()} 现在它可以正常工作了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多