Seite 1 von 1

Datei im Hintergrund laufend überprüfen

Verfasst: 29.04.2017 17:33
von friedelinde
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

Re: Datei im Hintergrund laufend überprüfen

Verfasst: 29.04.2017 17:40
von RSBasic
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.

Re: Datei im Hintergrund laufend überprüfen

Verfasst: 30.04.2017 00:36
von TheCube
Cooles Ding, hatte ich in der WinAPI-Sammlung bisher irgendwie übersehen. :shock:
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

Verfasst: 30.04.2017 10:42
von Bisonte
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

Re: Datei im Hintergrund laufend überprüfen

Verfasst: 30.04.2017 18:58
von TheCube
Hmm .. soweit, so klar.
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 ...
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.

Re: Datei im Hintergrund laufend überprüfen

Verfasst: 30.04.2017 19:58
von DarkDragon
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.

Re: Datei im Hintergrund laufend überprüfen

Verfasst: 30.04.2017 20:14
von RSBasic

Re: Datei im Hintergrund laufend überprüfen

Verfasst: 02.05.2017 18:07
von friedelinde
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?