具体问题。我已经设置了一个程序来监视带有数字的文本文件的更改。
FileSystemWatcher mikeWatcher = new FileSystemWatcher();
System.IO.WaitForChangedResult postMike;
string filePath = @"c:\path.txt";
mikeWatcher.Path = Path.GetDirectoryName(filePath);
mikeWatcher.Filter = Path.GetFileName(filePath);
// Wait for change to the file
postMike = mikeWatcher.WaitForChanged(System.IO.WatcherChangeTypes.Changed);
在此之后,一旦WaitForChanged标志完成,代码就会继续进行。
...
我遇到的问题是,当我手动更改文本文件并点击保存时成功触发标志,当其他程序(matlab)写入并保存到同一文件时,标志似乎不显示被触发。
我已经确认它确实是相同的文件被更改(路径是正确的)并且更改是在“上次修改日期”中注册的。此外,似乎matlab进程在保存后关闭文本文件,因此它不是发布问题,我不认为。
有任何想法或建议吗?我最容易改变我的c#代码然后更改matlab代码。欢迎所有建议!
答案 0 :(得分:2)
我认为问题在于,matlab可能会删除文件并创建一个名称完全相同的新文件,因此文件最终不会被更改,而是新创建的。您也应该捕获已删除和已创建的事件,而不是仅更改。
尝试此示例中的代码:http://msdn.microsoft.com/en-us/library/t6xf43e0(v=vs.110).aspx
答案 1 :(得分:2)
此处的解决方案是停止使用FileSystemWatcher,而是使用计时器扫描目录以进行更改。
我曾尝试在两个项目中使用FileSystemWatcher,在这两种情况下我发现它太不可靠了。它会错过一些事件,延迟一些事件,并报告一些事件两次。我放弃了,从那时起就没用过它。
这个答案可能不受欢迎,但我确信使用FileSystemWatcher的唯一正确方法是在评论中,如下所示:
// Tried FileSystemWatcher, but it was far too unreliable.
答案 2 :(得分:0)
我遇到了完全相同的问题,并通过设置FW.EnableRaisingEvents = true;
解决了这个问题。
奇怪,因为我不使用这些事件,但它有效。