Znajdź plik z określonym rozszerzeniem w folderze

93

Biorąc pod uwagę ścieżkę do folderu (na przykład C:\Random Folder), jak mogę znaleźć w nim plik, który ma określone rozszerzenie, na przykład txt? Zakładam, że będę musiał przeprowadzić wyszukiwanie *.txtw katalogu, ale nie jestem pewien, jak mam rozpocząć to wyszukiwanie w pierwszej kolejności.

Dominic K.
źródło

Odpowiedzi:

180

Spójrz na System.IO.Directoryklasę i metodę statyczną GetFiles. Ma przeciążenie, które akceptuje ścieżkę i wzorzec wyszukiwania. Przykład:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");
Anthony Pegram
źródło
Dzięki! Wszystkie odpowiedzi były dobre, ale najpierw odpowiedziałeś, więc ... tak :)
Dominic K
6
To nie działa, jeśli rozszerzenie byłoby takie jak txt_. Próbuję ustalić, czy w folderze jest jakiś plik * .exe, a mam tylko jeden plik * .exe_, ale zapytanie zwraca go, co nie jest poprawne.
Adrian
A co, jeśli chcę pojedynczy plik o nazwiemacos.txt
Prashant Pimpale,
Chcę znaleźć wszystkie pliki bez rozszerzenia. Mam pliki typu „plik” (bez rozszerzenia). Jak mogę znaleźć te pliki?
sohaiby
14

Właściwie to całkiem proste. Możesz używać System.IO.Directoryklasy w połączeniu z System.IO.Path. Coś takiego (użycie LINQ sprawia, że ​​jest to jeszcze łatwiejsze):

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

Oczywiście istnieje wiele odmian tej techniki. Niektóre z pozostałych odpowiedzi są prostsze, jeśli filtr jest prostszy. Ten ma zaletę w postaci opóźnionego wyliczania (jeśli to ma znaczenie) i bardziej elastycznego filtrowania kosztem większej ilości kodu.

Greg D.
źródło
Dzięki za całą dodatkową pracę, którą w to włożyłeś. Jednak wybieram tylko proste stwierdzenie, ponieważ mam tylko jeden plik tekstowy w katalogu (został wyodrębniony przez mój program).
Dominic K
3

Poniższa metoda zwraca tylko pliki z określonym rozszerzeniem (np. Plik z rozszerzeniem .txt, ale nie .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
źródło
1

Zgodnie z moim rozumieniem można to zrobić na dwa sposoby:

1) Możesz użyć klasy katalogu z metodą Getfiles i przejść przez wszystkie pliki, aby sprawdzić nasze wymagane rozszerzenie.

Directory.GetFiles ("twoja_ścieżka_folderu) [i] .Contains (" *. Txt ")

2) Możesz użyć klasy ścieżki z metodą GetExtension, która przyjmuje ścieżkę pliku jako parametr i weryfikuje rozszerzenie. Aby uzyskać ścieżkę do pliku, wystarczy ustawić warunek pętli, który pobierze pojedynczy plik i zwróci ścieżkę do pliku, której można użyć do weryfikacji.

Path.GetExtension (twoja_ścieżka_pliku) .Equals („. Json”)

Uwaga: Obie logiki muszą znajdować się w stanie zapętlenia.

Pulkit Shah
źródło
-1

Użyj tego kodu do odczytu pliku ze wszystkimi typami plików rozszerzeń.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Vishal Prajapati
źródło