用FindFirstChangeNotification如何得到发生改动的文件的文件名?(100分)

  • 主题发起人 主题发起人 theboyy
  • 开始时间 开始时间
T

theboyy

Unregistered / Unconfirmed
GUEST, unregistred user!
用FindFirstChangeNotification,我只能知道在一个目录里有文件或者目录发生了变化,<br>但无法得知发生变化的文件或者目录的名字,请问如何才能得到?<br>另,我想用多线程实现一个监视某个文件和目录的各个属性的后台线程,这样做是否可行?<br><br>谢谢
 
1)就是不行。<br>2)可以的,我做过。
 
theboyy:<br>至于要获取某个改变了的文件名,我想是可以获取的吧,,但我没去钻过,,,你可以自己<br>维护一个文件列表,,,,再将变化后的文件名和你维护的文件名列表比较就可以了,,<br><br>对于:<br>另,我想用多线程实现一个监视某个文件和目录的各个属性的后台线程,这样做是否可行?<br><br>是可行的,,<br>你可以先去看我发的一个帖子:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1243968<br><br>
 
哦,对了,FindFirstChangeNotification()的返回值应该是发生了这个Notification的<br>对象的句柄吧?具体我没试过,你可以看看!
 
如果是一个窗口,可以加到window消息链中并且获得window的Msg,可以得到文件名<br>但是我做的是一个多进程的程序,就是在主程序中生成一个进程监视[red]某个[/red]文件的修改时间等各个属性<br>包括access time.并且对于不同的change有不同的反映<br>用查询的方式吧,文件的access time会因为查询而改变<br>用FindFirstChangeNotification又无法获得发生改变的文件名,真是郁闷.<br>大家有什么高见,?<br>两位都做过此类程序,不知能否给我看看源代码<br>我的email: xhni@zju.edu.cn<br>感激不尽<br>
 
http://vip.6to23.com/NowCan1/tech/metmon.htm<br>http://vip.6to23.com/NowCan1/tech/shnotify.htm<br>http://nowcan.yeah.net<br>可惜没有Delphi的。<br><br>如果你用NT,可以看看ReadDirectoryChangesW,这个好像比较厉害。
 
可以建立多个线程,在每个线程里监控不同的目录,如果发生了变化,象theboyy所说的,就<br>建立一个维护列表,一个个比较,我编写了一个目录监控的程序,如果目录内容有变化就通知<br>其他机器,但有一点小问题:<br>dwChangeHandle=FindFirstChangeNotification(dir,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; true,FILE_NOTIFY_CHANGE_FILE_NAME|<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FILE_NOTIFY_CHANGE_DIR_NAME|<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FILE_NOTIFY_CHANGE_ATTRIBUTES|<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FILE_NOTIFY_CHANGE_SIZE|<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FILE_NOTIFY_CHANGE_LAST_WRITE);//开始目录监视<br>如果将第二个参数设为True就出错,该为false就没问题,不知道为什么?
 
后退
顶部