我需要编写一个delphi程序来监视文件夹的更改(添加,更新,重命名和删除文件)。 TShellChangeNotifier是否可行?说实话,我不知道如何使用它。
请帮忙。
感谢。
答案 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;