Pax*_*nos 1 .net vb.net filesystemwatcher
我正在开发一个Windows服务,它可以监视几个文件夹以进行更改,创建和删除.除了一个观察单个文件(带有配置设置的XML文件)进行微小更改的观察者之外,一切运行良好.
我尝试使用Windows服务代码并将其放入一个简单的Windows应用程序,其中包含文件系统观察者的启动/停止按钮并逐步完成.它从不检测XML配置文件的文件更改.确实发生了更改,并且文件的"修改日期"正在更新.
XmlEventReferences = New System.IO.FileSystemWatcher()
XmlEventReferences.Path = "C:\XmlReferences\"
XmlEventReferences.Filter = "*.xml"
XmlEventReferences.NotifyFilter = IO.NotifyFilters.FileName
AddHandler XmlEventReferences.Changed, AddressOf ReloadEventReferences
AddHandler XmlEventReferences.Created, AddressOf ReloadEventReferences
AddHandler XmlEventReferences., AddressOf ReloadEventReferences
XmlEventReferences.EnableRaisingEvents = True
Run Code Online (Sandbox Code Playgroud)
这是一些代码,这是XML文件的示例:
<EventReference>
<ER_EL_NUMBER>1</ER_EL_NUMBER>
<ER_SEND_TO_DATABASE>true</ER_SEND_TO_DATABASE>
<ER_ACTIVATE_ALARM>true</ER_ACTIVATE_ALARM>
<ER_DESCRIPTION />
</EventReference>
Run Code Online (Sandbox Code Playgroud)
Nol*_*rin 11
我相信问题是价值NotifyFilter.你实际上只是告诉FileSystemWatcher他们寻找文件名的变化.为了让它也引发Changed文件修改事件,你也需要指定LastWrite标志.
即适当的代码行应更改为:
XmlEventReferences.NotifyFilter = IO.NotifyFilters.FileName |
IO.NotifyFilters.LastWrite;
Run Code Online (Sandbox Code Playgroud)
有关NotifyFilters详细信息,请参阅MSDN上的页面.
注意:正如Joshua Belden指出的那样,你根本不需要设置NotifyFilter属性,因为MSDN声明:"默认是LastWrite,FileName和DirectoryName的按位OR组合." 但是,我认为在这种情况下最好是明确的 - 然后它会非常明显地表明它是什么FileSystemWatcher和不在观看.