C#FileSystemWatcher严重问题?

时间:2010-09-23 13:59:40

标签: c# file filesystems

我为一个驻留在 NetworkStorage设备(没有O.S.)的文件夹实现了FileSystemWatcher。

情景是,我们有两台机器说机器A和机器B. 我的应用程序在我的表单Button1和Button2上有两个按钮。我编写了重命名Test.txt文件的代码。

Button1:将文件Test.txt重命名为Test007.txt和 Button2:将文件Test007.txt重命名为Test.txt

假设我同时运行了A和B的tis exe文件。然后我可以通过从机器A按下Button1来重命名文件,现在如果我试图从另一台机器B重命名该文件,那么它就是一个错误

“System.ComponentModel.Win32Exception:指定的服务器无法执行请求的操作”

任何人对此有任何想法......请帮助我们找到解决方案。我们拥有该文件夹的适当权限。

注意:代码也适用于LAN文件夹,所以代码是完美的。它不适用于NetworkStoreDevice。

4 个答案:

答案 0 :(得分:5)

我们为一家运行在服务器上的Windows服务监控文件夹的公司构建了一个产品,当文件被添加到该文件夹​​时,文件被读取,处理(在这种情况下,创建条形码布局并打印在条形码打印机)然后删除。

对于一些表现相当不错的客户来说,一切都非常有效,直到我们遇到一个只在有时工作的客户。当一次将多个文件添加到文件夹时,尤其会出现问题。

问题是我们正在观看的文件夹位于samba文件系统的共享中,而FileSystemWatcher在samba文件系统共享上无法可靠地运行(Google为“FileSystemwatcher samba”)。既然你在谈论“NetworkStorage设备”,我想你的意思是它是一个NAS,NAS经常使用Linux / Unix操作系统并使用samba公开共享。

我们的解决方案是为我们的软件添加一项功能,以便将其配置为在需要时使用轮询。

答案 1 :(得分:3)

FileSystemWatcher依赖于操作系统来提升事件。如果存储设备上没有操作系统,则没有可用于提升事件的操作系统。

  

请注意,有几个因素会影响引发哪些文件系统更改事件,如下所述:

     

通用文件系统操作可能会引发多个事件。例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged和一些OnCreated和OnDeleted事件。移动文件是一项复杂的操作,由多个简单操作组成,因此可以引发多个事件。同样,某些应用程序(例如,防病毒软件)可能会导致FileSystemWatcher检测到其他文件系统事件。

     

只要不切换或删除磁盘,FileSystemWatcher就可以监视磁盘。 FileSystemWatcher不会引发CD和DVD的事件,因为时间戳和属性不能更改。远程计算机必须安装一个必需的平台才能使组件正常运行。

     

如果多个FileSystemWatcher对象在Service Pack 1或Windows 2000 SP2或更早版本之前的Windows XP中观察相同的UNC路径,则只有一个对象会引发事件。在运行Windows XP SP1及更高版本,Windows 2000 SP3或更高版本或Windows Server 2003的计算机上,所有FileSystemWatcher对象都将引发相应的事件。

     

设置Filter属性不会减少进入缓冲区的内容。

     

请注意,由于与Windows操作系统的依赖性,FileSystemWatcher在错过事件或超出缓冲区大小时不会引发Error事件。为避免遗漏事件,请遵循以下准则:

     

使用InternalBufferSize属性增加缓冲区大小可以防止丢失文件系统更改事件。

     

避免使用长文件名观看文件。考虑使用较短的名称重命名。

     

尽可能缩短您的事件处理代码。

来源:MSDN Library Reference: FileSystemWatcher Class

答案 2 :(得分:1)

FileSystemWatcher vs polling to watch for file changes

见第一个答案。文件系统观察者可靠,尤其是通过网络。

似乎没有解决您的问题,因为您似乎正在接收事件,这可能是一个时间问题吗?

答案 3 :(得分:0)

使用FileSystemWatcher和Polling的组合

FileSystemWatcher将在90%的时间内工作,但每x分钟添加一次民意调查,以捕捉可能遗漏的任何内容...

x的值取决于你需要的“实时”

相关问题