web-dev-qa-db-fra.com

Directory.GetFiles: comment obtenir uniquement le nom de fichier, pas le chemin complet?

Duplicate possible:
Comment obtenir uniquement les noms de fichiers dans un répertoire en utilisant c #?

En utilisant C #, je veux obtenir la liste des fichiers d’un dossier.
Mon but: ["file1.txt", "file2.txt"]

Alors j'ai écrit ceci:

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

Malheureusement, j'ai ce résultat: ["C:\\dir\\file1.txt", "C:\\dir\\file2.txt"]

Je pourrais supprimer la partie "C:\dir \" indésirable par la suite, mais existe-t-il une solution plus élégante?

61
Nicolas Raoul

Vous pouvez utiliser System.IO.Path.GetFileName pour faire ça.

Par exemple.,

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

Bien que vous puissiez utiliser FileInfo, il est beaucoup plus lourd que l'approche que vous utilisez déjà (il suffit de récupérer les chemins de fichiers). Je vous suggère donc de vous en tenir à GetFiles sauf si vous avez besoin des fonctionnalités supplémentaires de la classe FileInfo.

138
RedFilter

Essayer,

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

La ligne ci-dessus peut générer une exception UnauthorizedAccessException. Pour gérer ce lien, consultez le lien ci-dessous.

C # Handle System.UnauthorizedAccessException dans LINQ

28
Jignesh Thakker

Regardez à l'aide de FileInfo.Name Property

quelque chose comme

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

for (int iFile = 0; iFile < files.Length; iFile++)
    string fn = new FileInfo(files[iFile]).Name;

Jetez également un coup d'œil à l'utilisation de DirectoryInfo Class et FileInfo Class

8
Adriaan Stander

Utilisez ceci pour obtenir uniquement le nom de fichier.

Path.GetFileName(files[0]);
3
Osiris