Quiero enumerar todos los archivos y directorios contenidos en un directorio y subdirectorios de ese directorio. Si elijo C: \ como directorio, el programa obtendría todos los nombres de todos los archivos y carpetas del disco duro al que tenía acceso.
Una lista puede verse como
fd \ 1.txt fd \ 2.txt fd \ a \ fd \ b \ fd \ a \ 1.txt fd \ a \ 2.txt fd \ a \ a \ fd \ a \ b \ fd \ b \ 1.txt fd \ b \ 2.txt fd \ b \ a fd \ b \ b fd \ a \ a \ 1.txt fd \ a \ a \ a \ fd \ a \ b \ 1.txt fd \ a \ b \ a fd \ b \ a \ 1.txt fd \ b \ a \ a \ fd \ b \ b \ 1.txt fd \ b \ b \ a
c#
directory
subdirectory
getdirectories
derp_in_mouth
fuente
fuente
Respuestas:
dónde
*.*
está el patrón para hacer coincidir los archivosSi el directorio también es necesario, puede hacer lo siguiente:
fuente
Lsit<>
clase? ¿Qué devuelve GetFiles? ¿Y los nombres de los directorios que también se solicitaron?GetFiles
método devuelve una matriz de cadenas.Directory.GetFileSystemEntries
existe en .NET 4.0+ y devuelve tanto archivos como directorios. Llámalo así:Tenga en cuenta que no podrá hacer frente a los intentos de enumerar el contenido de los subdirectorios a los que no tiene acceso (UnauthorizedAccessException), pero puede ser suficiente para sus necesidades.
fuente
Utilice los métodos
GetDirectories
yGetFiles
para obtener las carpetas y los archivos.Utilice para obtener las carpetas y archivos en las subcarpetas también.
SearchOption
AllDirectories
fuente
Path
ofrece métodos más fiables.Path
para eliminar una parte izquierda fija de la ruta, por ejemplo, `C:` en el ejemplo dado.path.SubString(2)
para eliminar ingenuamente la letra de unidad y los dos puntos? ¿Qué pasa si el directorio es un recurso compartido de red? SugieroPath
como un método confiable porque puede proporcionar un montón de golosinas en esta área. En este caso, puede escribirfilePath.Substring(Path.GetPathRoot(filePath).Length)
. Sí, esto usa Substring ya que es el más conciso.fuente
Me temo que el
GetFiles
método devuelve una lista de archivos pero no los directorios. La lista de la pregunta me indica que el resultado también debe incluir las carpetas. Si desea una lista más personalizada, puede intentar llamarGetFiles
y de formaGetDirectories
recursiva. Prueba esto:Sugerencia: puede usar las clases
FileInfo
yDirectoryInfo
si necesita verificar algún atributo específico.fuente
Puede usar FindFirstFile que devuelve un identificador y luego llamar de forma recursiva a una función que llama a FindNextFile. Este es un buen enfoque ya que la estructura a la que se hace referencia se rellenaría con varios datos como AlternativeName, lastTmeCreated, modified, atributos, etc.
Pero a medida que usa .net framework, tendría que ingresar al área no administrada.
fuente
Alguna versión mejorada con max lvl para bajar en el directorio y la opción de excluir carpetas:
directorio de entrada:
salida de la función (el contenido de la carpeta 5 se excluye debido al límite de nivel y el contenido de la carpeta 3 se excluye porque está en la matriz de carpetas excluidas):
fuente
Si no tiene acceso a una subcarpeta dentro del árbol de directorios, Directory.GetFiles se detiene y lanza la excepción que da como resultado un valor nulo en la cadena de recepción [].
Aquí, vea esta respuesta https://stackoverflow.com/a/38959208/6310707
Gestiona la excepción dentro del bucle y sigue funcionando hasta que se atraviesa toda la carpeta.
fuente
la forma lógica y ordenada:
fuente
El siguiente ejemplo es el más rápido (no paralelizada) de archivos y subcarpetas en un árbol de directorios que maneja excepciones. Sería más rápido usar Directory.EnumerateDirectories usando SearchOption.AllDirectories para enumerar todos los directorios, pero este método fallará si llega a UnauthorizedAccessException o PathTooLongException.
Utiliza el tipo de colección Stack genérico, que es una pila de último en entrar, primero en salir (LIFO) y no utiliza la recursividad. Desde https://msdn.microsoft.com/en-us/library/bb513869.aspx , le permite enumerar todos los subdirectorios y archivos y tratar de manera efectiva esas excepciones.
fuente
Utilizo el siguiente código con un formulario que tiene 2 botones, uno para salir y el otro para comenzar. Un cuadro de diálogo del navegador de carpetas y un cuadro de diálogo para guardar archivo. El código se enumera a continuación y funciona en mi sistema Windows10 (64):
fuente
Con esto, puede ejecutarlos y elegir la subcarpeta cuando se ejecuta la consola
y este es el patchar para la exportación XML
fuente
fuente
Un poco simple y lento pero funcionando !! si no proporciona una ruta de archivo, utilice básicamente el "fixPath", esto es solo un ejemplo ... puede buscar el archivo correcto, escriba lo que desee, cometí un error cuando elegí el nombre de la lista porque "temporaryFileList es la lista de archivos buscados así que continúa con eso ... y el "errorList" habla por sí mismo
fuente
Crear lista de cadena
fuente
dir / s / b . > resultados.txt
/ s = subcarpetas / b = resultados de oso
fuente