如何实现对文件、文件夹修改的感知
类似windows资源管理器,当有文件被其他程序删除时,资源管理器会自动感知
请高手赐教
问题点数:100、回复次数:16Top
1 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 16:04:36 得分 0
可能需要用到Timer了Top
2 楼zxtyhy(地图鱼)回复于 2006-03-18 16:18:55 得分 0
ShellChangeNotifier如何使用?Top
3 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 16:26:12 得分 0
监测目录/文件的变化:
Root设置要监测的目录;
WatchSubTree设置是否要监测子目录;
NotifyFilters设置要监测的变化事件:
nfFileNameChange - 文件名改变
nfDirNameChange - 目录名改变
nfAttributeChange - 属性改变
nfSizeChange - 大小改变
nfWriteChange - 写入
nfSecurityChange - 安全性改变(可能是指NT/2000/XP上的安全性吧)
只要控件监测到你设置的变化,就会产生OnChange事件。Top
4 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 16:28:13 得分 0
然后在OnChange事件里面写程序Top
5 楼zxtyhy(地图鱼)回复于 2006-03-18 16:56:49 得分 0
能得到哪些文件改变了吗?Top
6 楼BlueTrees(蜗牛)回复于 2006-03-18 16:58:11 得分 30
给你一个API,是windows基础服务,即使没有shell也能使用。
FindFirstChangeNotification
这些API可以监视内核对象的变化,也就是可以监视文件夹,文件的改变。Top
7 楼zxtyhy(地图鱼)回复于 2006-03-18 17:07:31 得分 0
Api函数如何使用?能给点提示吗?
另外能不能得到被改变的文件、文件夹的名称。
难道要再遍历一边文件列表才能知道是哪里变化了吗?Top
8 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 17:26:27 得分 40
FindFirstChangeNotification的用法是这样的:
procedure TForm1.Button1Click(Sender: TObject);
var
stat:DWORD;
hd:THANDLE;
begin
hd:=FindFirstChangeNotification('e:\temp',false,FILE_NOTIFY_CHANGE_FILE_NAME);
if hd=INVALID_HANDLE_VALUE then
begin
ShowMessage( Syserrormessage(getlasterror()));
Exit;
end;
while true do
begin
stat:=WaitForSingleObject(hd,$ffffffff);
if stat =0 then
begin
ShowMessage('有文件改变');
FindCloseChangeNotification(hd); //关闭句柄
exit;
end;
end;
end;Top
9 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 17:36:50 得分 0
这里有一个Demo
http://www.fltvu.com/jiaocheng/chenxu1/DELPHI/vcl/file/discmon.zipTop
10 楼zxtyhy(地图鱼)回复于 2006-03-18 20:48:30 得分 0
只是想得到被改变的文件或文件夹的名称!!!
只知道某个文件夹下的文件被改变了,有什么用!如果该文件夹下有1万个文件,你怎么找出那些文件被改变了,每次都要查一遍,速度如何保证???Top
11 楼lianshaohua(永远深爱一个叫“...”的好女孩儿!)回复于 2006-03-18 22:52:37 得分 0
学习一下,,,....Top
12 楼apple800(老五)回复于 2006-03-19 12:50:12 得分 0
学习Top
13 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-03-21 15:45:36 得分 20
API:ReadDirectoryChangesW
see MSDN for more infoTop
14 楼zxtyhy(地图鱼)回复于 2006-03-21 23:05:54 得分 0
ReadDirectoryChangesW只是对NT系统的吧
问题还是没解决啊,
要支持所有windows系统
Top
15 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-22 07:03:27 得分 10
http://www.sysinternals.com/Utilities/Filemon.html
scroll down to "How FileMon Works"
Top
16 楼Blakhawk(黑鹰)回复于 2006-03-22 15:09:35 得分 0
cuteant(我这张旧船票能否登上你的破船|涛声是否依旧) ( ) 信誉:100 2006-3-18 17:36:51 得分: 0
你那个DEMO里头少一个文件,BrowseDr.pas 。能不能传上来看看。Top




