65 votes

Obtenir les noms de fichiers sans chemin d'un répertoire spécifique

Comment puis-je obtenir tous les noms de fichiers d'un répertoire (et ses sous-répertoires) sans le chemin complet ? Directory.GetFiles(...) renvoie toujours le chemin complet !

107voto

Vasea Points 2475

Vous pouvez extraire le nom de fichier du chemin complet.

.NET 3, noms de fichiers uniquement

 var filenames3 = Directory
                .GetFiles(dirPath, "*", SearchOption.AllDirectories)
                .Select(f => Path.GetFileName(f));

.NET 4, noms de fichiers uniquement

 var filenames4 = Directory
                .EnumerateFiles(dirPath, "*", SearchOption.AllDirectories)
                .Select(Path.GetFileName); // <-- note you can shorten the lambda

Renvoie les noms de fichiers avec un chemin relatif dans le répertoire

 // - file1.txt
// - file2.txt
// - subfolder1/file3.txt
// - subfolder2/file4.txt

var skipDirectory = dirPath.Length;
// because we don't want it to be prefixed by a slash
// if dirPath like "C:\MyFolder", rather than "C:\MyFolder\"
if(!dirPath.EndsWith("" + Path.DirectorySeparatorChar)) skipDirectory++;

var filenames4s = Directory
                .EnumerateFiles(dirPath, "*", SearchOption.AllDirectories)
                .Select(f => f.Substring(skipDirectory));

confirmer dans LinqPad...

 filenames3.SequenceEqual(filenames4).Dump(".NET 3 and 4 methods are the same?");

filenames3.Dump(".NET 3 Variant");
filenames4.Dump(".NET 4 Variant");
filenames4s.Dump(".NET 4, subfolders Variant");

Notez que les *Files(dir, pattern, behavior) peuvent être simplifiées en *Files(dir) si les sous-dossiers ne sont pas importants

20voto

Mitch Wheat Points 169614

Voir Path.GetFileName :

Renvoie le nom de fichier et l'extension de la chaîne de chemin spécifiée.

La classe Path a plusieurs méthodes de nom de fichier et de chemin utiles.

12voto

ChrisF Points 74295

Vous voulez Path.GetFileName

Cela renvoie uniquement le nom du fichier (avec l'extension).

Si vous voulez juste le nom sans l'extension, utilisez Path.GetFileNameWithoutExtension

6voto

Matt Grande Points 6230

Vous pouvez simplement extraire le nom du fichier du chemin complet.

 var sections = fullPath.Split('\\');
var fileName = sections[sections.Length - 1];

6voto

Santosh Kokatnur Points 117
string fileName = @"C:\mydir\myfile.ext";
string path = @"C:\mydir\";
string result;

result = Path.GetFileName(fileName);
Console.WriteLine("GetFileName('{0}') returns '{1}'", 
fileName, result);

result = Path.GetFileName(path);
Console.WriteLine("GetFileName('{0}') returns '{1}'", 
path, result);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X