[delphi编程]如何实现监视指定文件夹的文件操作

比如我想监视d:\123\这个文件夹下面是否有创建、修改、读取文件的操作,并且知道是哪个文件被创建,那个文件被修改。我使用s1:='d:\123';H:=FindFirs... 比如我想监视d:\123\这个文件夹下面是否有创建、修改、读取文件的操作,并且知道是哪个文件被创建,那个文件被修改。
我使用
s1:='d:\123';
H:=FindFirstChangeNotification(Pchar(String(S1)),true,FILE_NOTIFY_CHANGE_FILE_NAME);//监视改文件名tmp:= WaitForSingleObject(H,INFINITE);
while tmp=WAIT_OBJECT_0 do
begin //监视等待
form1.memo1.Lines.Add('有操作')FindNextChangeNotification(h);
tmp:= WaitForSingleObject(H,INFINITE);
end;
只能知道,有没有文件被改名,而不知道哪个文件被改名
我想知道哪个被改。希望高手指点一下
想学习的朋友可以留意,但请不要说话,我会删掉乱发言的人的
展开
 我来答
匿名用户
2013-07-23
展开全部
建议不要用FindNextChangeNotification,因为确实不清楚如何获得改变了的文件名,API的话可以使用ReadDirectoryChangesW来完成这个任务(当然还有一个也很好的API SHChangeNotifyRegister)。驱动层的监视更为好,不过这里我就不谈了。

char *strDir = "k:/temp/Other";

HANDLE hDirectory;
hDirectory = CreateFile( strDir, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL
);

const unsigned int dwListBaseLength = sizeof( FILE_NOTIFY_INFORMATION ) + MAX_PATH;

char buffer[ dwListBaseLength ] = { 0 };
FILE_NOTIFY_INFORMATION *pNotify = (FILE_NOTIFY_INFORMATION *) buffer;
DWORD BytesReturned = 0;

ReadDirectoryChangesW( hDirectory, pNotify, sizeof(buffer),
true, FILE_NOTIFY_CHANGE_FILE_NAME, &BytesReturned, NULL, NULL );

ShowMessage( WideCharToString( pNotify->FileName ) );

我是用bcb写的,你将她转为delphi就行了。
匿名用户
2013-07-23
展开全部
这个问题太难了,真是爱莫能助呀。哎。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式