7
votes

Suivi des modifications apportées à un dossier à Delphes

Je dois écrire un programme Delphi qui surveillera un dossier pour les modifications (ajouter, mettre à jour, renommer et supprimer des fichiers).

J'ai vu des suggestions à utiliser ThetShellChangenotifier. Est-ce la solution correcte pour ce problème? Comment devrais-je l'utiliser?


3 Réponses :


5
votes

2 commentaires

Il semble de surveiller l'ensemble du système de fichiers, je ne peux que la limiter à surveiller les disques durs locaux. Y a-t-il une façon de spécifier le dossier qu'il ne surveille que surveiller? Je crains que cela puisse manger beaucoup de ressources inutiles. Merci beaucoup.


Je ne pense pas que vous puissiez, du moins avec le SHCHANGENOTIFY. Néanmoins, vous ne devriez pas manger beaucoup de ressources, vous ignorerez tout ce qui n'affecte pas le chemin qui vous intéresse, Windows surveillera toutes les modifications dont vous écoutez ou non :)



5
votes

Ce Question pourrait aider. La réponse de Mghie montre comment utiliser correctement readdirectorychangangesw .


0 commentaires

0
votes

Je suggère d'utiliser 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;


1 commentaires

Je ne sais pas Madshell mais que répéter la boucle est très laid. Il jette et attrape continuellement des exceptions et a un retard codé dur ... pas ce que j'attends d'une solution propre et efficace ...