2010-06-30 14 views
69

Biorąc pod uwagę ścieżkę folderu (np. C: \ Losowy folder), w jaki sposób mogę znaleźć plik, który zawiera określone rozszerzenie, np. Txt? Zakładam, że będę musiał wyszukać plik * .txt w katalogu, ale nie jestem pewien, jak mam zacząć to wyszukiwanie w pierwszej kolejności.Znajdź plik z określonym rozszerzeniem w folderze

Odpowiedz

127

Spójrz na klasę System.IO.Directory 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"); 
+0

Dzięki! Wszystkie odpowiedzi były dobre, ale najpierw odpowiedziałeś, więc ... tak :) – DMan

+4

To nie działa, jeśli rozszerzenie będzie podobne do txt_. Próbuję ustalić, czy istnieje jakiś plik * .exe w folderze i mam tylko jeden plik * .exe_, ale zapytanie zwraca go, co nie jest poprawne. – Adrian

+1

Dokumentacja: https://msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx –

22

Można użyć klasy

Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories) 
+2

To nie działa, jeśli rozszerzenie będzie podobne do txt_ lub cokolwiek innego, jak podano w dokumentacja https://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx –

13

Jest to dość proste, w rzeczywistości Directory. Możesz użyć klasy System.IO.Directory w połączeniu z System.IO.Path. Coś jak (używając LINQ jeszcze bardziej ułatwia):

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 inne odpowiedzi są prostsze, jeśli filtr jest prostszy. Ta ma zaletę opóźnionego wyliczenia (jeśli to ma znaczenie) i bardziej elastycznego filtrowania kosztem większej ilości kodu.

+0

Dziękuję za wszystkie dodatkowe prace, które włożysz w to. Jednak idę do prostego oświadczenia, ponieważ mam tylko jeden plik tekstowy w katalogu (został wyodrębniony przez mój program). – DMan

1

metody poniżej 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)); 
    } 
0

Według mojego rozeznania, można to zrobić na dwa sposoby:

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

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

2) Można użyć klasy drogi metodą GetExtension która przyjmuje ścieżkę pliku jako parametr i weryfikuje extension.To uzyskać ścieżkę do pliku, wystarczy mieć pętli warunek, który będzie pobierał jeden plik i zwrotu filepath które mogą być wykorzystane do weryfikacji.

Path.GetExtension (your_file_path) .equals („” json)

Uwaga: Obie logiki muszą znajdować się w stanie pętli.

-1

Ten kod służy do odczytu pliku z wszystkimi typami plików rozszerzeń.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*"); 
Powiązane problemy