Hay un buen método nuevo en .NET 4.0 para obtener archivos en un directorio de forma continua a través de la enumeración.Directory.EnumerateFiles => UnauthorizedAccessException
El problema aquí es que si uno desea enumerar todos los archivos, es posible que uno no sepa con antelación qué archivos o carpetas tienen acceso protegido y puede lanzar una Access Access no autorizada.
reproducir, uno puede simplemente ejecutar este fragmento:
foreach (var file in Directory.EnumerateFiles(@"c:\", "*", SearchOption.AllDirectories))
{
// whatever
}
Antes de este método .NET existía era posible lograr más o menos el mismo efecto mediante la implementación de un iterador recursiva en la cadena de matriz regresar métodos. Pero no es tan vago como el nuevo método .NET.
¿Qué hacer? ¿Puede suprimirse la excepción de acceso no autorizado o es un hecho real al usar este método?
Me parece que el método debe tener una sobrecarga aceptando una acción para hacer frente a cualquier excepción.
Sí, su método de vaciado() debe ser resistente a los problemas con los archivos que está intentando tirar. Dale una sobrecarga. –
Ese no es mi problema Hans. El problema es que el avance del iterador de archivos (EnumerateFiles) provoca una excepción de acceso no autorizada y eso a su vez detiene la enumeración adicional, lo que no es deseable cuando se quiere un conjunto de resultados exhaustivo. –
@Hans - El método 'Dump()' no es el problema aquí, simplemente recorre la enumeración de cadenas. El problema es el método 'Directory.EnumerateFiles'. Y no creo que haya una manera de manejar el problema. Usted tiene que recurrir a 'SearchOption.TopDirectoryOnly' y manejar la recursión usted mismo, creo. – Mormegil