Использование Delphi для отслеживания изменений, внесенных в папку?
Мне нужно написать программу delphi, которая будет отслеживать папку для изменений (добавление, обновление, переименование и удаление файлов). Является ли TShellChangeNotifier способом пойти? Честно говоря, я понятия не имею, как им пользоваться.
пожалуйста, помогите.
спасибо.
3 ответов
этой вопрос может помочь. ответ mghie показывает, как правильно использовать ReadDirectoryChangesW
.
Я думаю, что эта статья поможет вам: изменения оболочки системы мониторинга с помощью Delphi
в основном он анализирует TShellChangeNotifier, отбрасывает его, а затем идет на TSHChangeNotify, который в основном является оболочкой для SHChangeNotify функция api windows.
Я предлагаю использовать 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;