CoderNotes - заметки программиста

Публикации  »  C#, C++
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Удаление папки и файлов рекурсивно на C#

Эта короткая заметка о том, как удалить папку и всё ее содержимое рекурсивно. Т.е. если в удаляемом каталоге есть подкаталоги и файлы и в них есть еще подкаталоги с файлами и т.д., все они будут удалены, таким образом будет удалена папка и всё, что в ней содержится.

Способ 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);
    }
}

Этот способ может пригодиться, если, например, в процессе удаления нужно делать что-то еще, например, писать лог-файл того, что удаляется.

 

Категория: C#, C++

Книги по теме:

Станислава Солнечная

Программирование на С, С++

Посмотреть все книги по программированию

Комментарии к статье:

16.09.24   Гость ыМмф

Добавить комментарий: