To nie jest czysty kod (ale dobrze że chociaż znasz to pojęcie).
Wyjątki, jak nazwa wskazuje, służą do obsługi sytuacji wyjątkowych. Takich których nie da się z góry przewidzieć i które normalnie raczej się nie powinny zdarzać. Czy podanie przez użytkownika złej ścieżki do folderu jest taką? Nie. To dość typowa sytuacja i można łatwo ją przewidzieć zanim spróbujesz coś z tego folderu odczytać (co spowodowałoby wyjątek). Po prostu użyj metody
Directory.Exists(string path). Jeśli folder nie istnieje, to męcz użytkownika (nawet i do skutku) o podanie poprawnej ścieżki. A dopiero kiedy masz ścieżkę która istnieje, to z niej czytaj.
Ogólna zasada jest taka: nie próbuj obsługiwać wyjątków, których wystąpieniu możesz zapobiec. Prawie zawsze zapobieżenie wyjątkowi jest lepsze dla programu niż łapanie go. Sama próba łapania wyjątku jest darmowa. Jeśli wyjątek nie wystąpi, program nic nie "płaci". Ale jeśli już wystąpi, to cena jest nieprzyjemna i lepiej jej unikać.
Co do przeszukiwania katalogów - wyciągnij z tego osobną metodę i wywołuj ją rekursywnie na każdym podkatalogu znalezionym w obecnie przerabianym katalogu.
Z innych uwag - masz pętlę while (true) i żadnego wyjścia z niej. To bardzo nieeleganckie - jedynym sposobem na wyjście z takiej aplikacji jest zabicie jej.