Эта короткая заметка о том, как удалить папку и всё ее содержимое рекурсивно. Т.е. если в удаляемом каталоге есть подкаталоги и файлы и в них есть еще подкаталоги с файлами и т.д., все они будут удалены, таким образом будет удалена папка и всё, что в ней содержится.
Способ 1. Удаление каталога методом Delete
Здесь всё просто, нужно лишь второй параметр метода Delete указать равным true
Directory.Delete(folder, true);
folder - соответственно удаляемый каталог, а второй параметр команды говорит о том, что нужно удалить все вложенные каталоги и файлы рекурсивно.
Так же можно обработать исключения, чтобы получить более подробную информацию при неудаче удаления
try { Directory.Delete(folder, true); } catch (DirectoryNotFoundException ex) { Console.WriteLine("Директория не найдена. Ошибка: " + ex.Message); } catch (UnauthorizedAccessException ex) { Console.WriteLine("Отсутствует доступ. Ошибка: " + ex.Message); } catch (Exception ex) { Console.WriteLine("Произошла ошибка: " + ex.Message); }
Более подробно о методе Delete можете почитать на docs.microsoft.com
Способ 2. Удаление каталога рекурсивной процедурой
private void deleteFolder(string folder) { try { DirectoryInfo di = new DirectoryInfo(folder); DirectoryInfo[] diA = di.GetDirectories(); FileInfo[] fi = di.GetFiles(); foreach (FileInfo f in fi) { f.Delete(); } foreach (DirectoryInfo df in diA) { deleteFolder(df.FullName); } if (di.GetDirectories().Length == 0 && di.GetFiles().Length == 0) di.Delete(); } catch (Exception ex) { Console.WriteLine("Произошла ошибка: " + ex.Message); } }
Этот способ может пригодиться, если, например, в процессе удаления нужно делать что-то еще, например, писать лог-файл того, что удаляется.
Комментарии к статье:
Добавить комментарий: