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
foosono 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
foofino 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)