2010-09-23 93 views
2

我已经为位于NetworkStorage设备(没有O.S.)的文件夹实施了FileSystemWatcher。C#FileSystemWatcher严重问题?

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

Button1的:重命名Test.txt文件到Test007.txt和 将Button2:重命名文件Test007.txt到TEST.TXT

并假设我已经从A和B同时运行那朵exe文件。然后,我可以通过按机器A中的Button1重命名文件,现在如果我试图从另一台机器B重命名文件,则它给出错误

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

任何人是有关于它的主意......请帮助我们找到解决方案。我们对文件夹拥有适当的权利。

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

+7

代码怎样才能完美的,如果它不工作?你可以发布代码,以便我们可以看到是否有问题吗? – 2010-09-23 14:01:18

+2

@ jeff-yates - 这是完美的,因为它不是一个错误。这是一个功能。 :-) – klabranche 2010-09-23 14:03:41

回答

5

我们建立了其中一个Windows服务的服务器上运行被监视的文件夹,当文件被添加到该文件夹​​,分别读取文件,处理一个公司的产品(在这种情况下,创造了一个条码的布局和印一台条形码打印机),然后删除。

一切正常,为多家客户提供了相当不错的表现,直到我们遇到一个客户,则只是有时工作来了。当许多文件一次添加到文件夹时,会出现特别的问题。

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

我们的解决方案是一个功能添加到我们的软件,以便它可以配置在需要的时候使用轮询。

0

使用FileSystemWatcher的组合和轮询

的FileSystemWatcher的工作,将90%的时间,但增加了一个民意调查每隔x分钟捕捉到任何可能错过......

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

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不会引发错误事件。为避免遗漏事件,请遵循以下指导原则:

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

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

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

来源:MSDN Library Reference: FileSystemWatcher Class