96 votes

Trouver un fichier avec une certaine extension dans un dossier

Étant donné le chemin d'un dossier (comme C:\Random Folder ), comment puis-je y trouver un fichier qui porte une certaine extension, par exemple txt ? Je suppose que je vais devoir faire une recherche sur *.txt dans le répertoire, mais je ne sais pas comment je suis censé commencer cette recherche en premier lieu.

194voto

Anthony Pegram Points 58528

Regardez le System.IO.Directory et la méthode statique GetFiles . Il possède une surcharge qui accepte un chemin et un modèle de recherche. Exemple :

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");

0 votes

Merci ! Toutes les réponses étaient bonnes, mais tu as répondu en premier donc... oui :)

6 votes

Cela ne fonctionne pas si l'extension est quelque chose comme txt_. J'essaie de déterminer s'il y a un fichier *.exe dans un dossier, et je n'ai qu'un seul fichier *.exe_, mais la requête le renvoie, ce qui n'est pas correct.

1 votes

34voto

sgriffinusa Points 3136

Vous pourriez utiliser le Annuaire classe

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)

3 votes

Cela ne fonctionne pas si l'extension est quelque chose comme txt_ ou autre chose comme indiqué dans la documentation. msdn.microsoft.com/fr/us/library/wz42302f(v=vs.110).aspx

13voto

Greg D Points 24218

C'est assez facile, en fait. Vous pouvez utiliser le System.IO.Directory en conjonction avec System.IO.Path . Quelque chose comme (l'utilisation de LINQ rend les choses encore plus faciles) :

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p));

// Get all filenames that have a .txt extension, excluding the extension
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt")
                             .Select(fn => Path.GetFileNameWithoutExtension(fn));

Il existe bien sûr de nombreuses variantes de cette technique. Certaines des autres réponses sont plus simples si votre filtre est plus simple. Celle-ci présente l'avantage d'une énumération retardée (si cela a de l'importance) et d'un filtrage plus souple, mais elle nécessite davantage de code.

0 votes

Merci pour tout le travail supplémentaire que vous avez fourni. Cependant, je me contente d'une simple déclaration puisque je n'ai qu'un seul fichier texte dans le répertoire (il a été extrait par mon programme).

2voto

hazjack Points 1114

La méthode ci-dessous renvoie uniquement les fichiers avec une certaine extension (ex : fichier avec .txt mais pas .txt1).

public static IEnumerable<string> GetFilesByExtension(string directoryPath, string extension, SearchOption searchOption)
    {
        return
            Directory.EnumerateFiles(directoryPath, "*" + extension, searchOption)
                .Where(x => string.Equals(Path.GetExtension(x), extension, StringComparison.InvariantCultureIgnoreCase));
    }

1voto

Pulkit Shah Points 71

D'après ce que j'ai compris, cela peut se faire de deux façons :

1) Vous pouvez utiliser la classe Directory avec la méthode Getfiles et parcourir tous les fichiers pour vérifier l'extension requise.

Directory.GetFiles("your_folder_path)[i].Contains("*.txt")

2) Vous pouvez utiliser la classe Path avec la méthode GetExtension qui prend le chemin d'accès au fichier comme paramètre et vérifie l'extension. Pour obtenir le chemin d'accès au fichier, il suffit d'avoir une condition en boucle qui va chercher un seul fichier et retourner le chemin d'accès au fichier qui peut être utilisé pour la vérification.

Path.GetExtension(your_file_path).Equals(".json")

Note : Les deux logiques doivent être à l'intérieur d'une condition de bouclage.

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