★★★★★是微软太龌龊,还是我的方法有问题,关于FileSystemWatcher的使用,路过的高人请进来指点一二。★★★★★

linuxyf 2009-05-05 10:06:23
我用一个FileSystemWatcher监视一个文件夹。监控文件内容何时发生改变,NotifyFilter属性设置如下:

watcher.NotifyFilter = watcher.NotifyFilter | NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.DirectoryName ;

监视Created,Deleted,Renamed和Changed事件,对于大部分的文件类型,监视是正确的,但是对于一个visio文件,如果我在坚实的文件夹下面打开一个visio文件,编辑后执行 另存为 操作,尽然监视不到Renamed的信息。

监视文件夹为D:\TEST2, 把文件绘图4.vsd另存为绘图44.vsd,事件序列如下:

2009-05-05 09:25:40 CREATED D:\TEST2\~$$绘图4.~vsd //创建临时文件
2009-05-05 09:25:40 CHANGED D:\TEST1\~$$绘图4.~vsd //改变临时文件内容
2009-05-05 09:25:51 CREATED D:\TEST2\绘图44.vsd //创建另存的文件
2009-05-05 09:25:51 DELETED D:\TEST2\绘图44.vsd //紧接着又删掉了
2009-05-05 09:25:51 CREATED D:\TEST2\VS09AC.tmp //创建临时文件
2009-05-05 09:25:51 DELETED D:\TEST2\VS09AC.tmp //删除临时文件
2009-05-05 09:25:51 CREATED D:\TEST2\绘图44.vsd //创建另存的文件
2009-05-05 09:25:51 CHANGED D:\TEST1\绘图44.vsd //改变文件内容
2009-05-05 09:26:02 CHANGED D:\TEST1\绘图44.vsd //改变文件内容,以下又都是针对一个临时文件的操作,但再没有对另存为的文件进行操作,在本时
刻09:26:02,我把 绘图44.vsd 复制出来,和最终的文件内容不一致,根本打不开,下面又根本
未监视到针对绘图44.vsd文件操作,这是为什么啊???
2009-05-05 09:26:05 DELETED D:\TEST2\~$$绘图4.~vsd
2009-05-05 09:26:05 CREATED D:\TEST2\~$$绘图44.~vsd
2009-05-05 09:26:05 CHANGED D:\TEST1\~$$绘图44.~vsd
2009-05-05 09:26:09 DELETED D:\TEST2\~$$绘图44.~vsd


...全文
245 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-05-05
  • 打赏
  • 举报
回复
另存为后关闭1文件。再打开看看
linuxyf 2009-05-05
  • 打赏
  • 举报
回复
请问hotact后来改用了怎么方案。

因为我监控到每一个事件后,需要做一些响应的处理。
linuxyf 2009-05-05
  • 打赏
  • 举报
回复
这是一个word文件另存为操作的事件序列:

2009-05-05 10:04:46 CREATED D:\TEST2\~$aaa.docx
2009-05-05 10:04:46 CHANGED D:\TEST1\~$aaa.docx
2009-05-05 10:05:16 CREATED D:\TEST2\bbb.docx
2009-05-05 10:05:16 CREATED D:\TEST2\~WRD0000.tmp
2009-05-05 10:05:16 CHANGED D:\TEST1\~WRD0000.tmp
2009-05-05 10:05:16 RENAMED D:\TEST2\bbb.docx rename to D:\TEST2\~WRL0001.tmp
2009-05-05 10:05:16 RENAMED D:\TEST2\~WRD0000.tmp rename to D:\TEST2\bbb.docx
2009-05-05 10:05:16 CREATED D:\TEST2\~$bbb.docx
2009-05-05 10:05:16 CHANGED D:\TEST1\~$bbb.docx
2009-05-05 10:05:17 DELETED D:\TEST2\~WRL0001.tmp
2009-05-05 10:05:17 DELETED D:\TEST2\~$aaa.docx
2009-05-05 10:05:18 DELETED D:\TEST2\~$bbb.docx
jingzhongrong 2009-05-05
  • 打赏
  • 举报
回复
可以试试用filemon监测看看结果。
jingzhongrong 2009-05-05
  • 打赏
  • 举报
回复
可以试试用filemon监测看看结果。
jingzhongrong 2009-05-05
  • 打赏
  • 举报
回复
可以试试用filemon监测看看结果。
chenchangxiong 2009-05-05
  • 打赏
  • 举报
回复
我用watchdirectorychange(c++) 好像微软的没问题吧,
你处理消息有问题吧,有些事情没考虑全

还有temp文件处理方式很多都是这样的 photoshop,ultraedit等等,
按照消息进入的顺序,正确的处理,应该没问题的
Dhoopu 2009-05-05
  • 打赏
  • 举报
回复
肯定不是微软的问题。
hotact 2009-05-05
  • 打赏
  • 举报
回复
FileSystemWatcher以前也用过,发现对office部分软件的文件操作确实很难监控,后来换了其他方案解决放弃使用FileSystemWatcher。
yedaoq 2009-05-05
  • 打赏
  • 举报
回复
“另存为”与“重命名”完成是两码事好不好....
另存为是指复制当前文件并为其指定一个新的名称,原来的文件并不会改变.
linuxyf 2009-05-05
  • 打赏
  • 举报
回复
针对word进行另存为操作,可以监视到renamed操作,而visio则没有。为何FileSystemWatcher监视不到visio文件修改文件内容的事件呢?
麻子Mozart 2009-05-05
  • 打赏
  • 举报
回复
up
zgke 2009-05-05
  • 打赏
  • 举报
回复
这个问题取决与你打开VSD的程序的程序把. 好象WORD也是.
linuxyf 2009-05-05
  • 打赏
  • 举报
回复
上面的事件序列就是另存、关闭文件后的结果。

不过问题自己解决了,换了一种思路,谢谢各位。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧