C# 删除 247 个不同子文件夹中的内容

本文关键字:文件夹 删除 | 更新日期: 2023-09-27 18:31:30

我想删除子文件夹中的所有内容。

C:''文件夹 -->根目录

A,B,C,D,.... -->子文件夹(信息:有247个子文件夹)

我不知道如何实现它,例如在 c# 或批处理文件中。

我很感激任何帮助。

C# 删除 247 个不同子文件夹中的内容

第二个参数(递归)为 true 时,所有子文件夹都将被删除!

Directory.Delete("yourpath", true);

如果要删除目录的内容,可以执行以下操作:

Directory.EnumerateFiles("yourpath", "*", SearchOption.AllDirectories).ToList().ForEach(f => File.Delete(f));

在批处理中,它(也)很容易:

rmdir /S "C:'Folder"

在 c# 中

foreach(var file in Directory.EnumerateFiles(sourceDirectory, 
                   "*", SearchOption.AllDirectories))
{
    File.Delete(file);
}

try
{
Directory.GetFiles(sourceDirectory, "*", SearchOption.AllDirectories)
     .ToList().ForEach(File.Delete);
}
catch(UnauthorizedAccessException uae)
{
}

注意:如果您没有 sourceDirectory 的权限,这将不起作用(在这两种情况下,尝试 catch 将防止应用错误)

如果您需要删除根文件夹中的所有内容(所有子文件夹及其中的所有文件,以及根文件夹本身中的文件),那么是的,Direcotry.Delete('path', true)就是您所需要的。

但是,如果您需要保留子文件夹(A,B,C,D),同时仍然删除其中的所有文件,那么没有直接/内置方法可以做到这一点,为此,通常,您需要首先获取根文件夹中的所有文件夹,然后遍历它们,然后删除其中的所有文件,将子文件夹留空。

类似于此方法(调用传递根路径的方法):

private void DeleteJustFilesFromFolder(string roootPath)
{
   DirectoryInfo d = new DirectoryInfo(roootPath);
   //delete files from root
   foreach (FileInfo fi in d.GetFiles())
   {
     fi.Delete();
   }
   //get root subfolders
   foreach (DirectoryInfo di in d.GetDirectories())
   {
      DeleteJustFilesFromFolder(di.FullName);
    //kept commented, but if you prefer then can delete subfolder by this line
    //di.Delete(); 
   }
}

在 c# 中,您可以使用:

foreach(string directory in Directory.GetDirectories(@"C:'Folder"))
   Directory.Delete(directory, true);

您还可以将搜索模式传递给Directory.GetDirectories(...)