Utviklere.

Utviklere.

Et sted for programmerere.

QFileSystemWatcher.

QFileSystemWatcher: Overvak kataloger og fa Gi nytt navn, Slett, Legg til, Endre varsler med navnet og banen til den endrede filen / dir.

QFileSystemWatcher gir varsel hvis overvaket katalog er endret. Men det gir ingen informasjon om typen endring. Sa her skal jeg forklare hvordan du finner endringen (omdope, legge til, slette, endre) og navnet pa filen / dir (inne i den overvakede dir) som er endret.

Forst av alt legger du til en klasse for prosjektet ditt. La oss nevne det & # 8220; MyFileSystemWatcher & # 8221 ;.

Legg na en klassevariabel av typen QFileSystemWatcher til denne klassen og en funksjon for a legge til baner a se pa.

Vi vil legge til to spor directoryUpdated (QString-bane) og fileUpdated (QString-bane) som vil bli koblet til tilsvarende signaler som sendes ut nar noen endring skjer i den overvakede dir / filen.

Vi trenger ogsa en variabel for a opprettholde listen over nav rende innhold i en katalog, og det kan sammenlignes med innholdet i katalogen etter at en endring er varslet for a finne ut navnet pa filen endret og typen endring. Vi bruker en QMap som har en QString som nokkel og QStringList som verdi for denne formalet. Nokkelen vil v re banen til noen katalog og verdien vil v re listen over navn pa alle filer / kataloger den inneholder.

Derfor fortsetter headerfilen MyFileSystemWatcher.h som:

I implementeringsfilen vil vi allokere minne til singleton-forekomsten av klasse og QFileSystemWatcher-variabelen & # 8220; _sysWatcher & # 8221;, vi vil ogsa opprettholde strominnholdet i hver katalogbane som er sett (lagt til i vaktmesteren) og sammenligne innholdet i katalogenUpdated () -metoden kalt nar en overvaket katalog er endret.

Sa her er hva implementeringsfilen MyFileSystemWatcher.cpp vil se ut som:

Pa denne maten kan du legge til noe nr. av stier til vaktmesteren ved a ringe den statiske metoden & # 8220; addWatchPath: & # 8221; og banen kan enten v re en fil eller katalog.

Hvis du vil se en katalog, sa vel som alle dens underkataloger, ma du legge banen til overordnet katalog og sti av alle dens underkataloger rekursivt til overvakeren.

Hvis du vil se en katalog & # 8220; ABC & # 8221; i C-stasjonen, bare ring metoden.

Dette handler om QFileSystemWatcher. Men det er en kjent feil i a bruke den til rekursiv overvakning pa Windows. For a vite mer om dette, sjekk ut mitt andre innlegg.

Win32 File Watcher API for a overvake Directory endringer.

Her skal jeg forklare hvordan jeg bruker Win32 File Watcher API for a se en katalog, samt underkataloger for eventuelle endringer og finne ut hvilken type endring.

Du kan bruke denne C ++ API til a se hvilken som helst katalog for endringer pa Windows Platform i en C ++-kompatibel applikasjon som jeg bruker den i min Qt-applikasjon pa grunn av en feil i QFileSystemWatcher nar du ser pa en katalog og dens underkataloger rekursivt. For a vite mer om QFileSystemWatcher bug klikk her.

Vi kan enten bruke ReadDirectoryChangesW eller FindFirstChangeNotification for a fa varsel om eventuelle endringer i en katalog eller dets underkataloger. Men den ekstra fordelen av ReadDirectoryChangesW er at den gir informasjon om endring og navnet pa filen som endres. Pa den annen side gir FinnFirstChangeNotification kun beskjed om at noen endring skjedde, men ingen annen informasjon om typen endring eller navnet pa filen.

Sa kan vi begynne med Hvordan implementere ReadDirectoryChangesW for a se en katalog. Her er koden:

Pa denne maten kan du lese endringene i en katalog og dens underkataloger (valgfritt. Angi 4. parameter til TRUE / FALSE i ReadDirectoryChangesW).