2015-10-20 80 views
0

我有一个FileSystemWatcher,它跟踪是否创建了新文件。如果是,我有一个方法读取文件,并做一些事情..
在下面的代码中,我得到一个FileNotFoundException,但路径/文件确实存在!我已经检查过路径,文件名等。不知道为什么它找不到该文件。
另外在调试模式下,我验证路径变量正确的道路,但是,当我强迫它继续下去,不知何故,运行,但不幸的是在释放模式停止..为什么我在文件存在时得到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

任何人都可以帮忙?

+0

的路径是完全正确的时候等待一点?如果您将路径复制并粘贴到Windows资源管理器中,它是否显示在那里? –

+1

FileSystemWatcher可能会令人不安。当您的代码试图打开它时,该文件可能不在那里。试图打开它之前,您是否尝试过调用File.Exists()? –

+0

我认为这也可能是一个安全问题,请参阅http://stackoverflow.com/a/10676402/704281 – Waescher

回答

0

FileSystemWatcher告诉你何时创建一个文件,是的。但这并不意味着该文件在这一点上完成了写作 - 它当然不是。当您逐步完成代码时,您将为其他进程提供写入和关闭文件所需的时间 - 最终,这是一个并发问题,调试时很难再现并发问题。以同样的方式,当你手动检查时,文件很长时间 - 问题在于时间。可悲的是,当文件关闭时(无法使用FileSystemWatcher为您提供备注),因此您的应用程序可以使用该文件。

您需要等到该文件是实际完成 - 一个简单的循环试图打开该文件,并没有应工作不够好:)

+0

我认为你是对的,暂时无法识别文件夹。我会检查你的解决方案,并回复你 –

+0

所以,你的建议帮了我很多。我把fileSystemWatcher放入一个if(File.Exists(e.FullPath)){myMethod()},现在它工作正常!谢谢! –

相关问题