Удалить папку/файлы и подпапку

Я хочу удалить папку, содержащую файлы и подпапку, также содержащие файлы. Я использовал все, но это не работает для меня. Я использую следующую функцию в своем веб-приложении asp.net:

var dir = new DirectoryInfo(folder_path);
dir.Delete(true); 

Иногда он удаляет папку, а иногда нет. Если вложенная папка содержит файл, она удаляет только файл, а не папку.

Ответ 1

Это выглядит правильно: http://www.ceveni.com/2008/03/delete-files-in-folder-and-subfolders.html

//to call the below method
EmptyFolder(new DirectoryInfo(@"C:\your Path"))


using System.IO; // dont forget to use this header

//Method to delete all files in the folder and subfolders

private void EmptyFolder(DirectoryInfo directoryInfo)
{
    foreach (FileInfo file in directoryInfo.GetFiles())
    {       
       file.Delete();
     }

    foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
    {
      EmptyFolder(subfolder);
    }
}

Ответ 4

Самый простой способ в моем опыте - это

Directory.Delete(folderPath, true);

Но у меня возникла проблема с этой функцией в сценарии, когда я пытаюсь создать одну и ту же папку сразу после ее удаления.

Directory.Delete(outDrawableFolder, true);
//Safety check, if folder did not exist create one
if (!Directory.Exists(outDrawableFolder))
{
    Directory.CreateDirectory(outDrawableFolder);
}

Теперь, когда мой код пытается создать некоторый файл в outDrwableFolder, он заканчивается исключением. например, создание файла образа с помощью api Image.Save(имя файла, формат).

Как-то эта функция вспомогательной функции работает для меня.

public static bool EraseDirectory(string folderPath, bool recursive)
{
    //Safety check for directory existence.
    if (!Directory.Exists(folderPath))
        return false;

    foreach(string file in Directory.GetFiles(folderPath))
    {
        File.Delete(file);
    }

    //Iterate to sub directory only if required.
    if (recursive)
    {
        foreach (string dir in Directory.GetDirectories(folderPath))
        {
            EraseDirectory(dir, recursive);
        }
    }
    //Delete the parent directory before leaving
    Directory.Delete(folderPath);
    return true;
}

Ответ 5

Вы также можете сделать то же самое, используя метод экземпляра DirectoryInfo. Я просто столкнулся с этой проблемой, и я считаю, что это также может решить вашу проблему.

var fullfilepath = Server.MapPath(System.Web.Configuration.WebConfigurationManager.AppSettings["folderPath"]);

System.IO.DirectoryInfo deleteTheseFiles = new System.IO.DirectoryInfo(fullfilepath);

deleteTheseFiles.Delete(true);

Для получения дополнительной информации посмотрите на эту ссылку, поскольку она выглядит так же.