Использование Delphi для отслеживания изменений, внесенных в папку? - PullRequest
7 голосов
/ 17 ноября 2009

Мне нужно написать программу delphi, которая будет отслеживать папку на предмет изменений (добавление, обновление, переименование и удаление файлов). Является ли TShellChangeNotifier способ пойти? Если честно, я понятия не имею, как его использовать.

Пожалуйста, помогите.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 17 ноября 2009

Этот вопрос может помочь. Ответ Мги показывает, как правильно использовать ReadDirectoryChangesW.

5 голосов
/ 17 ноября 2009

Думаю, эта статья поможет вам: Мониторинг изменений в оболочке системы с помощью Delphi

В основном он анализирует TShellChangeNotifier, отбрасывает его, а затем отправляет TSHChangeNotify, который в основном является оболочкой для SHChangeNotify Windows API-функции.

0 голосов
/ 17 ноября 2009

Я предлагаю использовать 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;
...