Эта короткая заметка о том, как удалить папку и всё ее содержимое рекурсивно. Т.е. если в удаляемом каталоге есть подкаталоги и файлы и в них есть еще подкаталоги с файлами и т.д., все они будут удалены, таким образом будет удалена папка и всё, что в ней содержится.
Способ 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);
}
}
Этот способ может пригодиться, если, например, в процессе удаления нужно делать что-то еще, например, писать лог-файл того, что удаляется.
Комментарии к статье:
Добавить комментарий: