2012-05-19 11 views
5

Ho bisogno del mio programma per contare il numero di file su un disco.Conteggio del numero di file su un'unità

Qual è il modo più veloce per farlo?

Directory.GetFiles() non è un'alternativa, in quanto è molto lento.

+0

Che tipo di risposta è? Ci deve essere un modo, abbiamo un diario NTFS, abbiamo il WMI e così via lol – animaonline

+3

È un _comment_ sulla domanda, non una risposta. E tu dici semplicemente che "GetFiles" è lento ". Cos'è veloce, nella tua definizione? La domanda manca di dettagli. – Oded

+0

se si dispone di journal NTFS, quindi è possibile eseguire Directory.GetFiles() all'avvio e quindi utilizzare il contatore di mantenimento del journal. – volody

risposta

2

Hai provato a importare kernel32.dll e utilizzarlo?

C'è un buon esempio di implementazione che qualcuno ha postato prima qui: https://stackoverflow.com/a/724184/912851. Potrebbe valerne la pena.

Edit: Il più veloce che ho visto nella mia vita è this application. Usa le riviste ntfs. e in pochi secondi elenca milioni di file sul mio disco fisso. Penso che abbiano un sdk e sorgenti su C++ o c. Forse puoi creare una DLL gestita e usarla su C#?

+0

Sì, ho provato anche questo, è molto lento. Ma grazie – animaonline

+1

Ero curioso, quindi ho creato un piccolo codice per confrontare entrambi i metodi sull'albero delle directory con file 42k: GetFiles = 1,2 secondi, questo metodo = 650 ms. Quindi è già 2x più veloce ... Come già scritto sopra Oded, IO è lento, non avrai un risultato immediato per centinaia di migliaia di file ... – Fabske

0
Func<string, int> files = null; 
files = p => Directory.GetFiles(p).Length() + Directory.GetDirectories(p).Select(p1 => files(p1)); 

int count = files(@"c:\"); 

Orribile ma linqy!

+0

Directory.GetFiles() non è un'alternativa ^^ – animaonline

+0

Come è affrontare la questione _slowness_ il PO sta chiedendo circa? – Oded

+0

Orribile, utilizzare GetFiles e ... non compilare: p – Fabske

0

è possibile leggere il giornale USN dell'unità, questo è molto veloce ma è necessario i diritti di amministratore

+0

Ho bisogno di una soluzione che funzioni anche con i filesystem FAT. – animaonline

Problemi correlati