Je dois écrire un programme Delphi qui surveillera un dossier pour les modifications (ajouter, mettre à jour, renommer et supprimer des fichiers). P>
J'ai vu des suggestions à utiliser ThetShellChangenotifier. Est-ce la solution correcte pour ce problème? Comment devrais-je l'utiliser? P>
3 Réponses :
Je pense que cet article vous aidera: Système de surveillance change de shell à l'aide de Delphi < / a> p>
Fondamentalement, il analyse le ttshellchangénotifiant, le rejette, puis vaut pour une TSHChangénotify qui est fondamentalement une enveloppe pour le SHCHANGENOTIFY fonction de l'API Windows. P>
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 :)
Ce Question pourrait aider. La réponse de Mghie montre comment utiliser correctement readdirectorychangangesw code>. p>
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;
Je ne sais pas Madshell mais que répéter code> 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 ...
web.archive.org /web/20160518172109/http://www.cromis.net/blo g / ... est très bon et gratuit.