Entwickler-Ecke

Dateizugriff - Datei überwachen


hydemarie - Di 10.01.17 17:02
Titel: Datei überwachen
Da ich gerade so schön im Fluss bin (meine letzte Delphianwendung erhielt immerhin einen positiven Kommentar), mache ich gleich weiter:

Mir steht der Sinn danach, eine Art einfachen Logbetrachter in Delphi zu schreiben. Im Wesentlichen so was wie BareTail [https://www.baremetalsoft.com/baretail/], nur weniger kacke schlecht. Dafür wäre es sinnvoll, würden geöffnete Dateien sozusagen laufend aktualisiert (neue Zeilen sollen automatisch angefügt werden). Muss ich das über 'nen Timer machen oder geht das auch Async?


Narses - Di 10.01.17 18:59

Moin!

Ich hab mal gerade was in Google eingeklimpert: Suche bei Google NTFS FILE CHANGE NOTIFICATION DELPHI :lupe: Ist da nicht direkt was für dich dabei? ;)

cu
Narses


hydemarie - Di 10.01.17 19:01

Ich wusste nicht mal, dass das WinAPI das kann. Das macht vieles einfacher, auch für andere Projekte. Danke!


Delete - Di 10.01.17 23:43

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mi 11.01.17 00:23

Ja. 8)

Ernsthaft: ich halte mich für nicht gut genug, da eine Anwendung zu schreiben, über deren Code ihr euch nicht amüsieren würdet. :D Als Freeware also vermutlich zumindest schon eher als als Open Source.


Delete - Mi 11.01.17 00:31

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mi 11.01.17 00:34

Wahrscheinlich wärst du schneller als ich.

Mal sehen. Diese Woche wird das nichts mehr. :wink:


jaenicke - Mi 11.01.17 10:03

Ich kann dafür wärmstens aus der JEDI VCL die Komponente TJvChangeNotify empfehlen. ;-)

Wer sie nicht sowieso installiert hat, muss nur den Installer für JCL und JVCL ausführen und dann die Komponente auf das Formular legen. Dann dort unter Notifications die Liste der Verzeichnisse und der gewünschten abzufangenden Aktionen eintragen und den Eventhandler für OnChangeNotify anlegen, das war es.


hydemarie - Mi 11.01.17 10:13

StackOverflow rät eigentlich von JEDI ab und ich wüsste auch nicht, warum ich eine T* nutzen sollte, wenn das per Syscall auch geht. :gruebel:


t.roller - Mi 11.01.17 11:55

https://msdn.microsoft.com/en-us/library/windows/desktop/bb762118(v=vs.85).aspx

http://delphi.about.com/library/code/ncaa030403b.htm

WINAPI:
const Shell32DLL = 'shell32.dll';

function SHChangeNotifyRegister;
external Shell32DLL index 2;
function SHChangeNotifyDeregister;
external Shell32DLL index 4;
function SHILCreateFromPath;
external Shell32DLL index 28;

TSHChangeNotify component by Elliott Shevin

Funktioniert mit XE7 und WIN8.1 immer noch.


hydemarie - Mi 11.01.17 11:58

user profile icont.roller hat folgendes geschrieben Zum zitierten Posting springen:
TSHChangeNotify component by Elliott Shevin


Zitat:
12 Oct 2000


:gruebel:


jaenicke - Mi 11.01.17 19:57

user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
StackOverflow rät eigentlich von JEDI ab und ich wüsste auch nicht, warum ich eine T* nutzen sollte, wenn das per Syscall auch geht. :gruebel:
Warum benutzt du denn dann Delphi? Du kannst ja auch Assembler schreiben.

Natürlich kann man alles selber machen, aber da nehme ich lieber fertige Komponenten und bin in einem Bruchteil der Zeit fertig.

Wenn die Zeit keine Rolle spielt, kann man natürlich auch das Rad jedesmal neu erfinden.


hydemarie - Do 12.01.17 19:57

Ich habe mit Assembler gerade erst angefangen, das dauert noch... aber ein Assemblerprogramm, das auf das WinAPI zugreift, ist gar nicht so furchtbar schwierig. :D

Danke trotzdem für den Hinweis. Ich versuche einfach mal ein paar Methoden.