2012-09-21 14 views
44

Mögliche Duplizieren:
How to get only filenames within a directory using c#?Directory.GetFiles: Wie bekomme ich nur den Dateinamen, nicht den vollständigen Pfad?

Verwendung von C#, möchte ich die Liste der Dateien in einem Ordner erhalten.
Mein Ziel: ["file1.txt", "file2.txt"]

Also schrieb ich folgendes:

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

Leider habe ich diese Ausgabe erhalten: ["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]

ich das unerwünschte "C: \ dir \" abstreifen konnte nachher Teil, aber Gibt es eine elegantere Lösung?

Antwort

108

Sie haben System.IO.Path.GetFileName, dies zu tun.

Z. B.

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

Während Sie FileInfo verwenden könnte, es ist viel mehr Schwergewicht als der Ansatz, den Sie bereits verwenden (nur Dateipfade abrufen). Also würde ich vorschlagen, Sie bleiben mit GetFiles, es sei denn, Sie benötigen die zusätzliche Funktionalität der FileInfo Klasse.

+14

'string [] files = Directory.GetFiles (dir) .Select (file => Path.GetFileName (Datei)) ToArray();.' –

3

Verwenden Sie dies, um nur den Dateinamen zu erhalten.

Path.GetFileName(files[0]); 
18

Versuchen,

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

Above Linie UnauthorizedAccessException werfen kann. Um damit umzugehen

untenstehenden Link überprüfen

C# Handle System.UnauthorizedAccessException in LINQ

+0

LINQ Cowboys vereinigen ! – David