【问题标题】:FileSystemWatcher returns FileNotFoundExceptionFileSystemWatcher 返回 FileNotFoundException
【发布时间】:2013-12-31 13:04:47
【问题描述】:

我正在开发一个 Windows 服务应用程序,它监视“C:\Program Files (x86)\My Directory\My Data”中的 CSV 文件。该服务能够读取/写入此位置。我已经测试了在服务启动时将文本文件写入目录,到目前为止一切似乎都很酷。

FileSystemWatcherOnChanged 处理程序在更新 CSV 文件时触发。但是在调用以下行时:

Dim myStream As Stream = New FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

即使文件存在,我也会收到FileNotFoundException。至此,我已经检查了文件权限并尝试使用服务器的管理员帐户运行我的服务,但没有成功。

对这种行为有什么想法吗?

【问题讨论】:

  • 您的程序可能会受到文件系统重定向,64位应用程序会看到c:\program文件中的文件,32位应用程序会被重定向到c:\程序文件(x86)。这可能与它有关,您的问题没有充分记录,无法拨打电话。
  • 即使是 64 位应用程序,我也明确对“Program Files (x86)”文件夹进行了静态引用。我一直在玩这个。似乎问题出现在我检查 If e.ChangeType = WatcherChangeTypes.Changed 然后设置 watcher.EnableRaisingEvents = False 以禁用 OnChanged 处理程序的重复提升的块中。

标签: .net windows-services filesystemwatcher


【解决方案1】:

在使用FileSystemWatcher 时,请务必确保您尝试访问的文件没有被其他进程锁定。

FileSystemWatcher 在创建文件时触发 OnChanged 事件 - 而不是在文件可​​供其他进程访问时。

【讨论】:

  • 文件已经创建并存在。我也确定它没有被锁定,因为我试图在C:\Users\Administrator\Documents` and tried to update the file using notepad - but I still get FileNotFoundException`中使用它的副本。
  • 好的,但我不是说在它失败后从 Windows 访问它。此时,文件可以通过写入过程释放。尝试在创建 FileStream 之前输入Thread.Sleep(1000);。别忘了加:using System.Threading;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多