Ho una struttura di directory più grande (dir + sottodirectory) con i file. Contiene file di determinati tipi. Per un tipo particolare (diciamo con l'appendice .foo
) ho bisogno di capire se i file sono stati aggiunti, modificati o cancellati .
Il primo approccio era quello di iterare su tutti i file e controllare il timestamp dei file. Funziona abbastanza bene per i file locali, ma una volta che risiedono su un file system di rete diventa troppo lento.
E, per rilevare i file cancellati, devo comunque creare e indicizzare. Un'idea è di creare valori hash per i file rilevanti e memorizzarli per directory. Sfortunatamente il caso normale è che nulla cambia la maggior parte del tempo, eppure devo ancora ricalcolare tutti i valori hash (lenti) solo per rilevare che non è cambiato nulla.
Nota: sto codificando in Qt 5.6 / C ++ e il codice deve funzionare su Windows, Mac e Linux, ma il focus della domanda è più il concetto e non il codice funzionante.
--- edit ---
Alcuni chiarimenti (come richiesto di seguito)
- si tratta di file per la simulazione di volo. Quando l'utente aggiunge o modifica i file, devo rieseguire alcune attività come analizzare questi file. I file
foo
sono file speciali a cui tengo, mentre i 10000 altri file del simulatore di volo possono essere ignorati. Il mio obiettivo è scoprire se devo iniziare il costoso processo di analisi, che è necessario solo se è stato modificato qualsiasi filefoo
- c'è davvero qualcosa come un monitor che guarda i file modificati in Qt
QFileSystemWatcher
. Ma non posso garantire di monitorare tutto il tempo, inoltre non sarebbe necessario. Quando avviò il mio software ho bisogno di scoprire se qualche filefoo
è cambiato, se così inizio analizzo, altrimenti salta questo passaggio. - Ci sono circa 100 file di
foo
fino al 10000% all'interno di una struttura di directory di > 50000 file - I file cambiano perché l'utente installa nuove funzionalità o ne elimina alcune. Questo accade mentre il mio software non è in esecuzione, ho già detto che non posso monitorare tutto il tempo. Quindi ho bisogno di qualcosa che funzioni dopo aver avviato il mio software
- Non ci sono client / server e ha bisogno di lavorare su Linux, Mac e Windows (ma questo è già stato menzionato nel post originale)