Хотя ответ и комментарий в какой-то степени верны. Они не решают проблему; вы «пытаетесь поймать, но напрасно» - конечно, напрасно - вы так и сделали.
Сначала вы пытаетесь получить каталог с именем root - вы получите исключение и по-прежнему попробуйте продолжить с той же переменной «root», которая будет иметь значение NULL или, по крайней мере, установлено неправильно.
Когда вы получаете сообщение об ошибке (и по какой-то причине просто связываете это сообщение с пользователем напрямую), вы должны остановить процесс. У вас есть исключение (которое, безусловно, является причиной остановки обработки - это неожиданная ошибка) - вы никогда не могли предположить, что процесс после исключения будет выполняться должным образом.
Я предлагаю вам (в этом случае) показать окно сообщения и «вернуться» и не go вперёд в процесс.
Хотя это не свято и не священно - я предлагаю вам прочитать на «оборонительном» программирование (C#) «
РЕДАКТИРОВАТЬ # 1
Измените начало метода на следующую строку:
void GetFilesAndSubDirs(DirectoryInfo root, TreeNodeCollection nodes)
{
FileInfo[] files = null;
DirectoryInfo[] subDirs = null;
try
{
files = root.GetFiles("*.*");
subDirs = root.GetDirectories();
}
catch (UnauthorizedAccessException e)
{
MessageBox.Show(e.Message);
return; // unexpected behavior : notice to user and stop
}
catch (DirectoryNotFoundException e)
{
MessageBox.Show(e.Message);
return; // unexpected behavior : notice to user and stop
}