使用Delphi跟踪对文件夹所做的更改?

时间:2009-11-17 07:23:41

标签: delphi monitoring directory

我需要编写一个delphi程序来监视文件夹的更改(添加,更新,重命名和删除文件)。 TShellChangeNotifier是否可行?说实话,我不知道如何使用它。

请帮忙。

感谢。

3 个答案:

答案 0 :(得分:5)

我认为这篇文章会对您有所帮助:Monitoring System Shell Changes using Delphi

基本上它会分析TShellChangeNotifier,丢弃它然后转到TSHChangeNotify,它基本上是SHChangeNotify windows api函数的包装器。

答案 1 :(得分:5)

question可能有所帮助。 mghie的回答显示了如何正确使用ReadDirectoryChangesW

答案 2 :(得分:0)

我建议使用madShell

RegisterShellEvent(ShellEvent, pathToMonitor, false, [seItemCreated, seItemRenamed]);

//

procedure Tform.ShellEvent(event: TShellEventType; const obj1, obj2: IShellObj; drive: char; value: cardinal);
var
  filename: string;
  isReady: boolean;
begin
  if (event = seItemCreated) then
    filename := obj1.Path
  else if (event = seItemRenamed) then
    filename := obj2.Path
  else
    exit;

  // try to open to ensure it's read for reading
  repeat
    try
      TfileStream.Create(filename, fmOpenRead + fmShareExclusive).Free;
      isReady := true;
    except
      isReady := false;
      sleep(250);
    end;
  until (isReady) or (not FileExists(filename));

  OutputDebugString(pChar('ShellEvent: ' + filename));

end;