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
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");
Można użyć klasy
Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
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 –
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.
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
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));
}
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.
Ten kod służy do odczytu pliku z wszystkimi typami plików rozszerzeń.
string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Dzięki! Wszystkie odpowiedzi były dobre, ale najpierw odpowiedziałeś, więc ... tak :) – DMan
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
Dokumentacja: https://msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx –