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.

Dominic K.
quelle

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

Sie können die Directory- Klasse verwenden

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
sgriffinusa
quelle
3
Dies funktioniert nicht, wenn die Erweiterung so etwas wie txt_ oder etwas anderes wäre, wie in der Dokumentation msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx
Randall Flagg
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.

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

Pulkit Shah
quelle
-1

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

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