2012-05-19 12 views
5

Necesito que mi programa cuente la cantidad de archivos en una unidad de disco.Contando el número de archivos en una unidad

¿Cuál es la forma más rápida de hacerlo?

Directory.GetFiles() no es una alternativa, ya que es muy lento.

+0

¿Qué tipo de respuesta es esa? Debe haber alguna manera, tenemos el diario NTFS, tenemos el WMI y así sucesivamente lol – animaonline

+3

Es un comentario sobre la pregunta, no una respuesta. Y simplemente dices que 'GetFiles' es lento". ¿Qué es rápido, en tu definición? La pregunta carece de detalles. – Oded

+0

si tiene un diario NTFS, entonces es posible hacer Directory.GetFiles() al inicio y luego usar el diario mantener el contador. – volody

Respuesta

2

¿Has intentado importar kernel32.dll y úsalo?

Hay un buen ejemplo de implementación que alguien publicó antes aquí: https://stackoverflow.com/a/724184/912851. Puede valer la pena mirar.

Edit: El más rápido que vi en mi vida es this application. Utiliza ntfs journals. y en cuestión de segundos enumera millones de archivos en mi disco duro. Creo que tienen un SDK y fuentes en C++ o c. Tal vez puedas crear un dll administrado y usar en C#?

+0

Sí, lo he intentado también, es muy lento. Pero gracias – animaonline

+1

tenía curiosidad así que hice un pequeño código para comparar ambos métodos en el árbol de directorios con 42k archivos: GetFiles = 1.2segundos, este método = 650ms. Entonces ya es 2 veces más rápido ... Como Oded ya escribió arriba, IO es lento, no tendrá resultados inmediatos para cientos de miles de archivos ... – Fabske

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

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

¡Horrible but linqy!

+0

Directory.GetFiles() no es una alternativa ^^ – animaonline

+0

¿Cómo se está abordando el problema de _slowness_ sobre el que el OP está preguntando? – Oded

+0

Horrible, use GetFiles, y ... no compila: p – Fabske

0

se puede leer la unidad del diario USN, esto es muy rápido pero se necesitan derechos de administrador

+0

Necesito una solución que también funcione con sistemas de archivos FAT. – animaonline

Cuestiones relacionadas