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 !
Réponses
Trop de publicités?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
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.
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