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.
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.
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#?
Sì, ho provato anche questo, è molto lento. Ma grazie – animaonline
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
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!
Directory.GetFiles() non è un'alternativa ^^ – animaonline
Come è affrontare la questione _slowness_ il PO sta chiedendo circa? – Oded
Orribile, utilizzare GetFiles e ... non compilare: p – Fabske
è possibile leggere il giornale USN dell'unità, questo è molto veloce ma è necessario i diritti di amministratore
Ho bisogno di una soluzione che funzioni anche con i filesystem FAT. – animaonline
Che tipo di risposta è? Ci deve essere un modo, abbiamo un diario NTFS, abbiamo il WMI e così via lol – animaonline
È 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
se si dispone di journal NTFS, quindi è possibile eseguire Directory.GetFiles() all'avvio e quindi utilizzare il contatore di mantenimento del journal. – volody