2012-09-21 24 views
44

Duplicar posible:
How to get only filenames within a directory using c#?Directory.GetFiles: cómo obtener solo el nombre de archivo, no la ruta completa?

con C#, quiero obtener la lista de archivos de una carpeta.
Mi objetivo: ["file1.txt", "file2.txt"]

Así que escribió esto:

string[] files = Directory.GetFiles(dir); 

Por desgracia, me sale esta salida: ["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]

que podría despojar a los no deseados "C: \ dir \" parte después, pero ¿hay una solución más elegante?

Respuesta

108

Puede utilizar System.IO.Path.GetFileName para hacer esto.

por ejemplo,

string[] files = Directory.GetFiles(dir); 
foreach(string file in files) 
    Console.WriteLine(Path.GetFileName(file)); 

Mientras que usted podría utilizar FileInfo, es mucho más pesado que el enfoque ya está utilizando (solo la recuperación de las rutas de archivos). Así que le sugiero que se quede con GetFiles a menos que necesite la funcionalidad adicional de la clase FileInfo.

+14

'string [] = Directory.GetFiles archivos (dir) .Elija (file => Path.GetFileName (archivo)) ToArray (.),' –

3

Use esto para obtener solo el nombre de archivo.

Path.GetFileName(files[0]); 
18

intento,

string[] files = new DirectoryInfo(dir).GetFiles().Select(o => o.Name).ToArray(); 

Por encima de la línea puede tirar UnauthorizedAccessException. Para manejar esta echa un vistazo a continuación enlace

C# Handle System.UnauthorizedAccessException in LINQ

+0

LINQ Cowboys unen ! – David

Cuestiones relacionadas