Hallo,
in einem Programm soll in regelmäßigen Abständen geprüft werden, ob eine Datei sich geändert hat.
Wie kann man das im Hintergrund realisieren ohne das Hauptprogramm unnötig zu verlangsamen?
Danke
Datei im Hintergrund laufend überprüfen
-
- Beiträge: 12
- Registriert: 15.02.2010 16:46
Re: Datei im Hintergrund laufend überprüfen
Wenn du eine plattformunabhängige Lösung suchst, dann erstelle einen Thread mit einer Endlosschleife und überprüfe jede Sekunde, ob sich das Änderungsdatum deiner gewünschten Datei geändert hat.
Wenn dein Programm nur unter Wndows laufen soll, dann empfehle ich dir den folgenden WinAPI-Beispielcode: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Vorteil dieser Methode ist, dass du nicht selber dauern im Hintergrund prüfen musst, ob sich eine Datei geändert hat, sondern Windows sagt dir automatisch Bescheid, sobald sich eine bestimmte Datei ändert und du kannst in Echtzeit darauf reagieren.
Wenn dein Programm nur unter Wndows laufen soll, dann empfehle ich dir den folgenden WinAPI-Beispielcode: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Vorteil dieser Methode ist, dass du nicht selber dauern im Hintergrund prüfen musst, ob sich eine Datei geändert hat, sondern Windows sagt dir automatisch Bescheid, sobald sich eine bestimmte Datei ändert und du kannst in Echtzeit darauf reagieren.
- TheCube
- Beiträge: 150
- Registriert: 20.07.2010 23:59
- Computerausstattung: Risen 3400G 16MB Win10-64Bit
- Wohnort: NRW
Re: Datei im Hintergrund laufend überprüfen
Cooles Ding, hatte ich in der WinAPI-Sammlung bisher irgendwie übersehen.
Es muss ja nicht immer die Sysinternals-Suite sein, um dem PC bzgl. Dateien auf die Finger zu schauen.
Beim Umbenennen von Dateien springt bei mir immer nur Case #FILE_ACTION_RENAMED_OLD_NAME an.
Wozu dient #FILE_ACTION_RENAMED_NEW_NAME, bzw. wobei wird das ausgelöst ?
Es muss ja nicht immer die Sysinternals-Suite sein, um dem PC bzgl. Dateien auf die Finger zu schauen.
Beim Umbenennen von Dateien springt bei mir immer nur Case #FILE_ACTION_RENAMED_OLD_NAME an.
Wozu dient #FILE_ACTION_RENAMED_NEW_NAME, bzw. wobei wird das ausgelöst ?
Re: Datei im Hintergrund laufend überprüfen
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Dort würde dann in der Rückgabe der Funktion der neue Dateiname stehen. lt. M$
__________________________________________________
URL-Tags hinzugefügt
30.04.2017
RSBasic
Dort würde dann in der Rückgabe der Funktion der neue Dateiname stehen. lt. M$
__________________________________________________
URL-Tags hinzugefügt
30.04.2017
RSBasic
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
- TheCube
- Beiträge: 150
- Registriert: 20.07.2010 23:59
- Computerausstattung: Risen 3400G 16MB Win10-64Bit
- Wohnort: NRW
Re: Datei im Hintergrund laufend überprüfen
Hmm .. soweit, so klar.
Aber meine Ausgabe im Editorgadget zeigt dieses "Event" leider nie an wenn ich eine Datei umbenenne.
Ausserdem ist gelegentlich ein Zeichen angehängt am Filenamen in 'FileAction_Filename',
meist sowas wie Pfad/Doku.pdf1 machchmal auch eine 2 oder was unicode-Kryptisches.
Ich nutze PB5.60 X86 auf Win7 32Bit.
Aber meine Ausgabe im Editorgadget zeigt dieses "Event" leider nie an wenn ich eine Datei umbenenne.
Code: Alles auswählen
... snip ...
Select buffer\Action
Case #FILE_ACTION_ADDED
AddGadgetItem(2,-1,"Added: " + DirectoryName.s + FileAction_Filename,0,0)
Case #FILE_ACTION_REMOVED
AddGadgetItem(2,-1,"Removed: " + DirectoryName.s + FileAction_Filename,0,0)
Case #FILE_ACTION_MODIFIED
AddGadgetItem(2,-1,"Modified: " + DirectoryName.s + FileAction_Filename,0,0)
Case #FILE_ACTION_RENAMED_OLD_NAME *** OK ***
;Dateiumbenennung: Alter Dateiname
AddGadgetItem(2,-1,"Renamed Old: " + DirectoryName.s + FileAction_Filename,0,0)
Case #FILE_ACTION_RENAMED_NEW_NAME ### Kommt nie ###
;Dateiumbenennung: Neuer Dateiname
AddGadgetItem(2,-1,"Renamed New: " + DirectoryName.s + FileAction_Filename,0,0)
EndSelect
... snip ...
meist sowas wie Pfad/Doku.pdf1 machchmal auch eine 2 oder was unicode-Kryptisches.
Ich nutze PB5.60 X86 auf Win7 32Bit.
-
- Beiträge: 6267
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Datei im Hintergrund laufend überprüfen
Nur für den Fall dass jemand sowas unter Linux sucht. Das heißt dort inotify (steht für inode notify). Die maximale Anzahl der Benachrichtiger sind aber begrenzt durch eine Konstante im System. Unter macOS heißt das FSEvents.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Re: Datei im Hintergrund laufend überprüfen
Für Linux gibt es auch Beispielcodes von Omi:
http://chabba.de/Linux/Misc/Directory_S ... rSimple.pb
http://chabba.de/Linux/Misc/File_SetMonitorSimple.pb
http://chabba.de/Linux/Misc/Directory_S ... rSimple.pb
http://chabba.de/Linux/Misc/File_SetMonitorSimple.pb
-
- Beiträge: 12
- Registriert: 15.02.2010 16:46
Re: Datei im Hintergrund laufend überprüfen
Vielen Dank für den schnellen Hinweis.
Merkwürdigerweise kann man aber auf die Inhalte auch Global dimensionierte Arrays in der ThreadProcedure nicht zugreifen.
Gibt es eine Möglichkeit in einem Thread auf ArrayInhalte des Hauptprogramm zuzugreifen?
Merkwürdigerweise kann man aber auf die Inhalte auch Global dimensionierte Arrays in der ThreadProcedure nicht zugreifen.
Gibt es eine Möglichkeit in einem Thread auf ArrayInhalte des Hauptprogramm zuzugreifen?