# 前言

学 C# 的 File 和 Directory 时候突然想到这个问题,因为普通的 DELETE 方法只能删除空文件夹,而删除带有文件和文件夹的目录就会报错

所以心血来潮写下这篇笔记

# 代码

下面是 cs 一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpHello
{
internal class 删除目录大法
{
public 删除目录大法(string dir)
{      
Console.WriteLine("-------------删除目录大法cs666测试开始-----------------");
del(dir);
}
private void del(string dir)
{
DirectoryInfo d = new DirectoryInfo(dir);      
DirectoryInfo[] directorys = d.GetDirectories();
for(int i = 0; directorys.Length > i; i++)
{
del(d + "/" + directorys[i].Name);
}      
FileInfo[] files = d.GetFiles("*");
foreach(FileInfo file in files)
{        
File.Delete(file.FullName);
}      
Directory.Delete(d.FullName, true);
}
}
}

下面是核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void del(string dir)
{
DirectoryInfo d = new DirectoryInfo(dir);      
DirectoryInfo[] directorys = d.GetDirectories();
for(int i = 0; directorys.Length > i; i++)
{
del(d + "/" + directorys[i].Name);
}      
FileInfo[] files = d.GetFiles("*");
foreach(FileInfo file in files)
{        
File.Delete(file.FullName);
}      
Directory.Delete(d.FullName, true);
}

就是简单的递归

# 原理

先获取当前文件夹内的信息,判断是否有文件夹,如果有的话就进入该文件夹并重复上面操作

直到进入一个没有文件夹的目录,然后使用 foreach 遍历该文件夹下所有文件并删除,之后删除该文件夹

完成操作后跳出该级递归返回到上一层对上一层第二个文件夹做出上述相同的操作直到这层目录没有文件夹,删除该层所有文件

删除该层目录,返回上一层…

# 后记

应该没啥 bug 吧