FileSystemWatcher的疑问--高分求解

zlz_212 2008-02-19 05:35:12
先说下自己要做的东西
利用FileSystemWatcher监控一个文件夹,把文件夹内的文件名保存到数据库,如果被监控文件夹下的文件/文件夹发生,增加/删除/重命名等,那么在数据库内也做对应的修改。
现在遇到如下问题:
1、当在被监控的文件夹内发生剪切-粘贴文件夹时,发生2个事件,删除文件夹,创建文件夹,但是在被移动的文件夹内的文件并不会发生删除/创建的事件

2、被监控文件夹下一个文件/文件夹被删除到回收站,那么在数据库内要把对应的记录删除掉,当我们还原文件时,不触发事件

问如何才能够处理上诉的问题
...全文
116 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
0xff 2008-02-20
  • 打赏
  • 举报
回复
晕 ~ 上面说的[Renamed]扩展是指将 移动文件/文件夹 也归为[Renamed]类型
0xff 2008-02-20
  • 打赏
  • 举报
回复
1、FileSystemWatcher 要用好是挺麻烦的,前段时间正好做了一个文件夹监控的程序,把其中涉及 重命名/移动 的做法简单描述一下:

分析FileSystemWatcher的事件类型[Created][Changed][Deleted],显然不能满足我们正常使用习惯,
所以第一步就是要扩展一个事件类型[Renamed],即重命名文件或文件夹(移动文件或文件夹);

为了实现上面的想法,首先需要
1、定义一个 “事件消息队列” ,FileSystemWatcher捕获到[Created][Changed][Deleted]事件时,将捕获到的“消息内容”添加到队列里;
2、在 “事件消息队列” 添加[Created]消息时,处理队列里的消息,将符合条件的消息合并,将多余的消息删除;
3、另起一个线程,循环处理“事件消息队列” ;(这里注意,遇到[Deleted]事件时,需要做延时处理,给合并消息留下充足的时间)
(注意处理多线程同步)

附,合并规则:
[Deleted][Created] ==> [Renamed]
因为[Deleted]是要做延时处理的,所以还要做一些可能的合并规则,如:
[Renamed][Created] ==> [Created] (可能?我忘了覆盖时触发什么事件了)

上述合并必须依赖“新文件名”和“旧文件名”作为 同一个文件/文件夹 消息的索引
需要注意的就是[Renamed]事件处理前后,新文件名和旧文件名和当前文件名的区别



2、删除到回收站和还原文件 不触发事件?没试过,LZ先自己试试吧,总有解决办法的,实在不行就改成直接删除……
yingshis 2008-02-20
  • 打赏
  • 举报
回复
up
stning 2008-02-20
  • 打赏
  • 举报
回复
帮顶,我没做过。
zlz_212 2008-02-20
  • 打赏
  • 举报
回复
1 的情况比较特殊,如果我对新增的文件夹下的文件文件夹进行遍历的话,那么如果是从外面(即监控的目录之外的地方)复制进来的文件夹就可能发生插入重复的文件的可能。

2 应该可以监控Recyle目录

我现在去试试看,然后回复大家
blestcc 2008-02-19
  • 打赏
  • 举报
回复
1好解决,判断操作的是文件夹就对它下面所有文件和文件夹也做相同处理
2要弄清楚还原触发的事件
love969 2008-02-19
  • 打赏
  • 举报
回复
对,楼主的回复我猛然想到,
还原应该监控recycle目录的Deleted事件。
kugua70708 2008-02-19
  • 打赏
  • 举报
回复
没用过,不过也提出自己的想法:
1.当一个文件夹触发删除事件时,下面的文件夹和文件肯定也会被删除,
既然他们不发生事件,那就利用父文件夹的事件自己查找此文件夹下的文件夹和文件,然后记录到数据库
2.查找一下删除到回收站的事件对象里的属性,是否有标志直接删除或者删除到回收站之类的属性,
如果有,可以用他们来解决问题
love969 2008-02-19
  • 打赏
  • 举报
回复
1.肯定要创建两个FileSystemWatcher,另一个用来监控"被移动的文件夹"

2.还原时应该用别的方法来处理。因为还原不属于Created,Deleted, Changed和Renamed吧.

基本上没用过,纯属愚见,楼主见谅。
ojekleen 2008-02-19
  • 打赏
  • 举报
回复
查查win32 API ,关键是怎么扑捉事件

110,533

社区成员

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

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

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