Domanda

Esiste un modo (su Windows che utilizza Delphi 2010) per ottenere il numero di file in una directory senza attraversare effettivamente tutti i file?

Voglio implementare una barra di avanzamento durante alcune operazioni di indicizzazione del file system. Per questo motivo ho bisogno di sapere quanti file ci sono nella directory.

Qual è il modo più veloce per ottenere il numero di file in una directory?

È stato utile?

Soluzione

Penso che il modo più veloce sia usare il metodo TDirectory.GetFiles che si trova in IOutils.pas. Poiché il numero di file (visibili) in una directory può essere diverso per ogni utente, c'è solo una piccola possibilità che ci sia un solo numero da recuperare in qualche modo.

L'approccio FindFirst / FindNext (racchiuso nel metodo sopra) non attraversa effettivamente i file, attraversa solo le voci in una tabella, quindi potrebbe essere più veloce del previsto.

Altri suggerimenti

Se si esegue Windows 7 o Server 2008 R2, si consiglia di estrarre le funzioni FindFirst e FindMatchingFile da SysUtils e di hackerare il primo per utilizzare FindFirstFileEx anziché FindFirstFile. Quindi puoi impostare il parametro flags aggiuntivo su 2 (definito in MSDN come FIND_FIRST_EX_LARGE_FETCH ) con questa impostazione condizionata su (Win32majorversion = 6) e (Win32minorversion > = 1), per il momento.

Questa impostazione produce un aumento di velocità molto significativo per i loop FindFirst / FindNext su questi sistemi operativi. Cerca FindFirstFileEx su MSDN per ulteriori dettagli, come la documentazione più recente non si trova nella documentazione Microsoft recuperata dalla guida di Delphi.

TDirectory.GetFiles alla fine sembra chiamare FindFirst, quindi non ti offrirà molti vantaggi oltre a semplificare il tuo codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top