删除文件夹/文件和子文件夹

saf*_*afi 14 c#

我想删除一个包含文件的文件夹和一个包含文件的子文件夹.我已经使用了所有东西,但它对我不起作用.我在我的web应用程序asp.net中使用以下函数:

var dir = new DirectoryInfo(folder_path);
dir.Delete(true); 
Run Code Online (Sandbox Code Playgroud)

有时它删除文件夹,有时则不删除.如果子文件夹包含文件,它只删除文件,而不删除文件夹.

小智 28

Directory.Delete(folder_path, recursive: true);

也会得到你想要的结果,并且更容易发现错误.


Car*_*ode 7

这看起来是正确的: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);
    }
}
Run Code Online (Sandbox Code Playgroud)


A.B*_*.B. 6

根据我的经验,最简单的方法是这个

Directory.Delete(folderPath, true);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在删除后立即创建相同的文件夹时,我在某个场景中遇到了此功能的问题。

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

现在,当我的代码尝试在 outDrwableFolder 中创建一些文件时,它最终会出现异常。例如使用 api Image.Save(filename, format) 创建图像文件。

不知何故,这个辅助函数对我有用。

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;
}
Run Code Online (Sandbox Code Playgroud)