Suchen Sie eine Datei mit einer bestimmten Erweiterung im Ordner


91

C:\Random FolderWie kann ich bei einem Ordnerpfad (wie ) eine Datei finden, die eine bestimmte Erweiterung enthält, wie z txt. Ich gehe davon aus, dass ich *.txtim Verzeichnis nach etwas suchen muss, bin mir aber nicht sicher, wie ich diese Suche überhaupt starten soll.

Antworten:


176

Schauen Sie sich die System.IO.DirectoryKlasse und die statische Methode an GetFiles. Es hat eine Überladung, die einen Pfad und ein Suchmuster akzeptiert. Beispiel:

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

Vielen Dank! Alle Antworten waren gut, aber Sie haben zuerst geantwortet, also ... ja :)
Dominic K

6
Dies funktioniert nicht, wenn die Erweiterung so etwas wie txt_ wäre. Ich versuche festzustellen, ob sich in einem Ordner eine * .exe-Datei befindet, und ich habe nur eine * .exe_-Datei, aber die Abfrage gibt sie zurück, was nicht korrekt ist.
Adrian


Was ist, wenn ich die einzelne Datei haben möchte, die so heißtmacos.txt
Prashant Pimpale

Ich möchte alle Dateien ohne Erweiterung finden. Ich habe einige Dateien mit dem Dateityp "Datei" (keine Erweiterung). Wie kann ich diese Dateien finden?
Sohaiby


14

Eigentlich ist es ganz einfach. Sie können die System.IO.DirectoryKlasse in Verbindung mit verwenden System.IO.Path. So etwas wie (die Verwendung von LINQ macht es noch einfacher):

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));

Natürlich gibt es auch viele Variationen dieser Technik. Einige der anderen Antworten sind einfacher, wenn Ihr Filter einfacher ist. Dieser hat den Vorteil der verzögerten Aufzählung (falls dies wichtig ist) und einer flexibleren Filterung auf Kosten von mehr Code.


Vielen Dank für all die zusätzliche Arbeit, die Sie in diese Sache gesteckt haben. Ich gehe jedoch nur auf eine einfache Anweisung ein, da ich nur eine Textdatei im Verzeichnis habe (sie wurde von meinem Programm extrahiert).
Dominic K

3

Die folgende Methode gibt nur die Dateien mit einer bestimmten Erweiterung zurück (z. B. Datei mit .txt, aber nicht .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

Nach meinem Verständnis kann dies auf zwei Arten geschehen:

1) Sie können die Verzeichnisklasse mit der Getfiles-Methode verwenden und alle Dateien durchlaufen, um unsere erforderliche Erweiterung zu überprüfen.

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

2) Sie können die Pfadklasse mit der GetExtension-Methode verwenden, die den Dateipfad als Parameter verwendet und die Erweiterung überprüft. Um den Dateipfad abzurufen, müssen Sie nur eine Schleifenbedingung haben, die eine einzelne Datei abruft und den Dateipfad zurückgibt, der zur Überprüfung verwendet werden kann.

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

Hinweis: Sowohl die Logik muss sich in einer Schleifenbedingung befinden.


-1

Verwenden Sie diesen Code zum Lesen von Dateien mit allen Arten von Erweiterungsdateien.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.