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.
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.
¿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#?
Sí, lo he intentado también, es muy lento. Pero gracias – animaonline
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
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!
Directory.GetFiles() no es una alternativa ^^ – animaonline
¿Cómo se está abordando el problema de _slowness_ sobre el que el OP está preguntando? – Oded
Horrible, use GetFiles, y ... no compila: p – Fabske
se puede leer la unidad del diario USN, esto es muy rápido pero se necesitan derechos de administrador
Necesito una solución que también funcione con sistemas de archivos FAT. – animaonline
¿Qué tipo de respuesta es esa? Debe haber alguna manera, tenemos el diario NTFS, tenemos el WMI y así sucesivamente lol – animaonline
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
si tiene un diario NTFS, entonces es posible hacer Directory.GetFiles() al inicio y luego usar el diario mantener el contador. – volody