Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# fileSystemWatcher出现问题_C#_.net_Filesystemwatcher - Fatal编程技术网

C# fileSystemWatcher出现问题

C# fileSystemWatcher出现问题,c#,.net,filesystemwatcher,C#,.net,Filesystemwatcher,我有两个应用程序,不能修改的CREATOR和OBSERVER。CREATOR操纵许多文件,我需要OBSERVER知道这是什么时候发生的。我用C编写了OBSERVER,现在使用的是FileSystemWatcher。我将path设置为my path,将filter设置为FILE,并添加所有必要的事件。但当创建者修改文件时,在OBSERVER中不会引发任何事件。奇怪的是,当我手动修改文件时,OBSERVER确实看到了更改。我想也许CREATOR没有释放文件,但当我关闭CREATOR时,OBSERVE

我有两个应用程序,不能修改的CREATOR和OBSERVER。CREATOR操纵许多文件,我需要OBSERVER知道这是什么时候发生的。我用C编写了OBSERVER,现在使用的是FileSystemWatcher。我将path设置为my path,将filter设置为FILE,并添加所有必要的事件。但当创建者修改文件时,在OBSERVER中不会引发任何事件。奇怪的是,当我手动修改文件时,OBSERVER确实看到了更改。我想也许CREATOR没有释放文件,但当我关闭CREATOR时,OBSERVER仍然看不到更改

知道我做错了什么吗

额外详情: 当创建者修改文件时,我可以手动删除它,或者当我打开文件时,我看到所有更改都已保存

编辑 我的fileSystemWatcher对象设置:

fileSystemWatcherObs.EnableRaisingEvents = true;
fileSystemWatcherObs.Filter = "kbd.dbf";
fileSystemWatcherObs.IncludeSubdirectories = true;
fileSystemWatcherObs.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Attributes |
    NotifyFilters.CreationTime | NotifyFilters.DirectoryName |NotifyFilters.LastAccess | NotifyFilters.Security |
    NotifyFilters.Size;
fileSystemWatcherObs.Path = "D:\\FOLDER";
fileSystemWatcherObs.SynchronizingObject = this;
fileSystemWatcherObs.Changed += new System.IO.FileSystemEventHandler(  this.fileSystemWatcherObs_Changed );
fileSystemWatcherObs.Created += new System.IO.FileSystemEventHandler( this.fileSystemWatcherObs_Created );
fileSystemWatcherObs.Deleted += new System.IO.FileSystemEventHandler( this.fileSystemWatcherObs_Deleted );
fileSystemWatcherObs.Renamed += new System.IO.RenamedEventHandler( this.fileSystemWatcherObs_Renamed );

当然,这里有一些提示可以帮助您:

无论您是手动还是由您创建的另一个应用程序进行更改,这都无关紧要,因为当您手动进行更改时,您实际上使用了一些应用程序,如notepad.exe或其他什么,所以这并不重要。 在设置路径并注册事件处理程序之后,应该将EnableRaisingEvent设置为true开始监视,因此它应该是设置监视程序的所有配置之后的最后一件事。 在NotifyFilter上,您正在设置整个通知过滤器,这将导致您有时接收重复的通知。 由于您只想查看特定文件夹,因此不必包含子文件夹,即FinCludeSubDirectory应为false。 为什么要为此设置同步对象?如果你不得不这样做,最好是把它带到一个新的对象上。
请阅读以下内容:您有一个修改文件的应用程序,您使用filesystemwatcher编写了一个应用程序来检查这些修改,但它不会注意到您的创建者应用程序何时修改它们?请从您的observer应用程序中发布相关代码。是的,完全正确。我不知道我做错了什么。但我不确定这是否能解释为什么即使在你关闭creator应用程序时也看不到更改-我认为至少在creator关闭文件时修改时间会改变。当你的creator应用程序更改文件时,你能通过手动打开文件并检查来确认更改吗,也许您没有在writer流上调用Flush等等,另一件事是为什么要设置整个通知过滤器?您只需要使用其中的一些属性。此设置是在我通过鼠标单击设置某些属性时由visual studio生成的。你的提示很有用,但我知道。使用提示进行更改后,它不起作用。没关系,您已设置了多个标志,这将导致您接收重复的通知,例如:NotifyFilters.LastWrite和NotifyFilters。当文件更改时,属性将接收重复的通知,一个用于上次写入,另一个用于属性。。。