Chcę wyświetlić wszystkie pliki i katalogi zawarte w katalogu i podkatalogach tego katalogu. Gdybym wybrał C: \ jako katalog, program uzyskałby każdą nazwę każdego pliku i folderu na dysku twardym, do którego miał dostęp.
Może wyglądać lista
fd \ 1.txt fd \ 2.txt fd \ a \ fd \ b \ fd \ a \ 1.txt fd \ a \ 2.txt fd \ a \ a \ fd \ a \ b \ fd \ b \ 1.txt fd \ b \ 2.txt fd \ b \ a fd \ b \ b fd \ a \ a \ 1.txt fd \ a \ a \ a \ fd \ a \ b \ 1.txt fd \ a \ b \ a fd \ b \ a \ 1.txt fd \ b \ a \ a \ fd \ b \ b \ 1.txt fd \ b \ b \ a
c#
directory
subdirectory
getdirectories
derp_in_mouth
źródło
źródło
Odpowiedzi:
gdzie
*.*
jest wzorzec pasujący do plikówJeśli katalog jest również potrzebny, możesz przejść w ten sposób:
źródło
Lsit<>
klasa? Co zwraca GetFiles? A co z nazwami katalogów, które również były wymagane?GetFiles
Sposób powraca tablicę napisów.Directory.GetFileSystemEntries
istnieje w .NET 4.0+ i zwraca zarówno pliki, jak i katalogi. Nazwij to tak:Zauważ, że nie poradzi sobie z próbami wylistowania zawartości podkatalogów, do których nie masz dostępu (UnauthorizedAccessException), ale może być wystarczające dla twoich potrzeb.
źródło
Użyj metod
GetDirectories
iGetFiles
, aby pobrać foldery i pliki.Użyj, aby pobrać foldery i pliki w podfolderach.
SearchOption
AllDirectories
źródło
Path
oferuje bardziej niezawodne metody.Path
do usunięcia stałej lewej części ścieżki, np. `C:` w podanym przykładzie.path.SubString(2)
naiwnie usunąć literę dysku i dwukropek? A jeśli katalog jest udziałem sieciowym? ProponujęPath
jako niezawodną metodę, ponieważ może zapewnić mnóstwo bajerów w tej dziedzinie. W takim przypadku możesz napisaćfilePath.Substring(Path.GetPathRoot(filePath).Length)
. Tak, to używa podłańcucha, ponieważ jest najbardziej zwięzła.źródło
Obawiam się, że
GetFiles
metoda zwraca listę plików, ale nie katalogów. Lista w pytaniu podpowiada mi, że wynik powinien zawierać również foldery. Jeśli chcesz bardziej spersonalizowaną listę, możesz spróbować wywołaćGetFiles
iGetDirectories
rekurencyjnie. Spróbuj tego:Wskazówka: możesz użyć klas
FileInfo
iDirectoryInfo
, jeśli chcesz sprawdzić określony atrybut.źródło
Możesz użyć FindFirstFile, który zwraca uchwyt, a następnie rekurencyjnie wywołuje funkcję, która wywołuje FindNextFile.Jest to dobre podejście, ponieważ struktura, do której się odwołuje, byłaby wypełniona różnymi danymi, takimi jak alternatywaName, lastTmeCreated, modified, atrybuty itp.
Ale kiedy używasz .net Framework, musisz wejść do niezarządzanego obszaru.
źródło
Ulepszona wersja z max lvl do zejścia w dół w katalogu i opcją wykluczenia folderów:
katalog wejściowy:
wyjście funkcji (zawartość folderu 5 jest wykluczona ze względu na limit lvl, a zawartość folderu 3 jest wykluczona, ponieważ znajduje się w tablicy excludedFolders):
źródło
Jeśli nie masz dostępu do podfolderu w drzewie katalogów, Directory.GetFiles zatrzymuje się i zgłasza wyjątek powodujący wartość null w ciągu odbierającym [].
Tutaj zobacz tę odpowiedź https://stackoverflow.com/a/38959208/6310707
Zarządza wyjątkiem wewnątrz pętli i kontynuuje pracę, aż przejdzie cały folder.
źródło
logiczny i uporządkowany sposób:
źródło
Poniższy przykład najszybszy (nie zrównoleglony) sposób wyświetla listę plików i podfolderów w drzewie katalogów obsługujących wyjątki. Szybsze byłoby użycie Directory.EnumerateDirectories przy użyciu SearchOption.AllDirectories do wyliczenia wszystkich katalogów, ale ta metoda zakończy się niepowodzeniem, jeśli trafi w wyjątek UnauthorizedAccessException lub PathTooLongException.
Używa ogólnego typu kolekcji Stack, który jest stosem last in first out (LIFO) i nie używa rekursji. Ze strony https://msdn.microsoft.com/en-us/library/bb513869.aspx umożliwia wyliczenie wszystkich podkatalogów i plików oraz efektywne radzenie sobie z tymi wyjątkami.
źródło
Używam następującego kodu z formularzem, który ma 2 przyciski, jeden do wyjścia, a drugi do uruchomienia. Okno dialogowe przeglądarki folderów i okno dialogowe zapisywania pliku. Kod znajduje się poniżej i działa w moim systemie Windows10 (64):
źródło
Dzięki temu możesz je po prostu uruchomić i wybrać podfolder po uruchomieniu konsoli
i to jest patchar do eksportu XML
źródło
źródło
Trochę proste i powoli, ale działa !! jeśli nie podasz ścieżki do pliku, użyj "fixPath" to tylko przykład .... możesz wyszukaćpoprawny fileType co chcesz, popełniłem błąd kiedy wybrałem nazwę listy ponieważ "tymczasowa lista_plików jest przeszukiwaną listą plików więc kontynuuj ... a „errorList” mówi samo za siebie
źródło
Utwórz listę ciągów
źródło
dir / s / b . > wyniki.txt
/ s = podfoldery / b = wyniki niedźwiedzia
źródło