Datei im Hintergrund laufend überprüfen

Anfängerfragen zum Programmieren mit PureBasic.
friedelinde
Beiträge: 12
Registriert: 15.02.2010 16:46

Datei im Hintergrund laufend überprüfen

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Datei im Hintergrund laufend überprüfen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
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

Beitrag 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 ?
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Datei im Hintergrund laufend überprüfen

Beitrag 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
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​​
Benutzeravatar
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

Beitrag 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.
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Datei im Hintergrund laufend überprüfen

Beitrag 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.
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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Datei im Hintergrund laufend überprüfen

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
friedelinde
Beiträge: 12
Registriert: 15.02.2010 16:46

Re: Datei im Hintergrund laufend überprüfen

Beitrag 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?
Antworten