Rechercher un fichier avec une certaine extension dans le dossier


92

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

Réponses:


177

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

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

Merci! Toutes les réponses étaient bonnes, mais vous avez répondu en premier alors ... ouais :)
Dominic K

6
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.
Adrian


Et si je veux le fichier unique qui porte le nommacos.txt
Prashant Pimpale

Je veux trouver tous les fichiers sans aucune extension. J'ai des fichiers avec le type de fichier «fichier» (sans extension), comment puis-je trouver ces fichiers?
sohaiby


14

C'est assez facile, en fait. Vous pouvez utiliser la System.IO.Directoryclasse 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. Celui-ci a l'avantage de l'énumération retardée (si cela compte) et d'un filtrage plus flexible au détriment de plus de code.


Merci pour tout le travail supplémentaire que vous y consacrez. Cependant, je vais juste pour une simple déclaration car je n'ai qu'un seul fichier texte dans le répertoire (il a été extrait par mon programme).
Dominic K

3

La méthode ci-dessous ne renvoie que les fichiers avec une certaine extension (par exemple: 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));
    }

1

Selon ce que je comprends, cela peut être fait de deux manières:

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

Directory.GetFiles ("votre_chemin_dossier) [i] .Contains (" *. Txt ")

2) Vous pouvez utiliser la classe de chemin avec la méthode GetExtension qui prend le chemin du fichier comme paramètre et vérifie l'extension.Pour obtenir le chemin du fichier, il suffit d'avoir une condition de boucle qui récupérera un seul fichier et retournera le chemin du fichier qui peut être utilisé pour la vérification.

Path.GetExtension (votre_chemin_fichier) .Equals (". Json")

Remarque: la logique doit être à l'intérieur d'une condition de boucle.


-1

Utilisez ce code pour lire un fichier avec tous les types de fichiers d'extension.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.