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.

Dominic K
la source

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");
Anthony Pegram
la source
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
31

Vous pouvez utiliser la classe Directory

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
sgriffinusa
la source
3
Cela ne fonctionne pas si l'extension est quelque chose comme txt_ ou autre chose comme indiqué dans la documentation msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx
Randall Flagg
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.

Greg D
la source
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));
    }
Hazjack
la source
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.

Pulkit Shah
la source
-1

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

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Vishal Prajapati
la source