84 votes

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

Lorsque j'utilise la ligne de code ci-dessous, je reçois un tableau de chaînes contenant le chemin d'accès complet des fichiers individuels.

 private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf");
 

Je voudrais savoir s'il existe un moyen de récupérer uniquement les noms de fichiers dans les chaînes plutôt que les chemins d'accès entiers.

171voto

Thomas Levesque Points 141081

Vous pouvez utiliser Path.GetFileName pour obtenir le nom du fichier à partir du chemin complet.

 private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf")
                                     .Select(path => Path.GetFileName(path))
                                     .ToArray();
 

EDIT: la solution ci-dessus utilise LINQ , elle nécessite donc au minimum .NET 3.5. Voici une solution qui fonctionne sur les versions précédentes:

 private string[] pdfFiles = GetFileNames("C:\\Documents", *.pdf");

private static string[] GetFileNames(string path, string filter)
{
    string[] files = Directory.GetFiles(path, filter);
    for(int i = 0; i < files.Length; i++)
        files[i] = Path.GetFileName(files[i]);
    return files;
}
 

9voto

Abbas Points 7413

Vous pouvez utiliser la méthode Path.GetFileName(yourFileName); (MSDN) pour obtenir simplement le nom du fichier.

8voto

Jesper Palm Points 5280

Vous pouvez utiliser les classes DirectoryInfo et FileInfo.

 //GetFiles on DirectoryInfo returns a FileInfo object.
var pdfFiles = new DirectoryInfo("C:\\Documents").GetFiles("*.pdf");

//FileInfo has a Name property that only contains the filename part.
var firstPdfFilename = pdfFiles[0].Name;
 

1voto

Mshini Points 61

Il y a tellement de façons :)

1ère voie:

 string[] folders = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
string jsonString = JsonConvert.SerializeObject(folders);
 

2ème manière:

 string[] folders = new DirectoryInfo(yourPath).GetDirectories().Select(d => d.Name).ToArray();
 

3ème voie:

 string[] folders = 
    new DirectoryInfo(yourPath).GetDirectories().Select(delegate(DirectoryInfo di)
    {
        return di.Name;
    }).ToArray();
 

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