public static void DelectDir(string srcPath)
{
try
{
DirectoryInfo dir = new DirectoryInfo(srcPath);
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
foreach (FileSystemInfo i in fileinfo)
{
if (i is DirectoryInfo) //判断是否文件夹
{
DirectoryInfo subdir = new DirectoryInfo(i.FullName);
subdir.Delete(true); //删除子目录和文件
}
else
{
File.Delete(i.FullName); //删除指定文件
}
}
}
catch (Exception e)
{
throw;
}
}
调用DelectDir方法前可以先判断文件夹是否存在
if(Directory.Exists(srcPath))
{
DelectDir(srcPath);
}
上述两例中的yourPath应为指定文件夹的路径 如: D:\test 第一例则会删除test文件夹下的所有子项 第二例则是test文件夹及其子项一起删除 需要注意的是Directory.Delete方法有两个重载 举例说明:
Directory.Delete(yourPath); //如果yourPath有子项 则删除失败 抛出异常
Directory.Delete(yourPath,true); //第二个为bool类型参数 表示是否需要使用递归删除
补充说明 如果只是需要删除文件 就使用File类 如下
if(File.Exists(filePath))
File.Delete(filePath)
上例中的filePath为文件的完整路径 如: C:\test\test.txt
我们知道,在C#/.NET中的System.IO命名空间下,都是关于文件和文件夹信息操作的类。如果在开发中有删除指定文件夹下所有文件和文件夹这样的需要,应该如何使用C#/.NET来实现这个需求呢?方法一:直接删除整个指定文件夹使用使用Directory.Delete("文件夹路径",true)方法,然后重建这个文件夹【暴力,直接】,具体操作如下:
-
Directory.Delete(fileDir,true);
-
Directory.CreateDirectory(fileDir);
虽然以上这个方法简单,但不推荐使用。方法二:分步删除指定文件夹中的文件和文件夹。因为从指定文件夹中获取文件列表和获取文件夹列表使用的是不同的方法,所以,我们即要删除文件,也要删除文件的话就必须分两步,第一步删除所有文件,第二步删除所有文件夹,我们来整理一下实现这个需求的大概步骤:1.使用Directory.GetFiles("文件夹路径")获取指定文件夹中所有的文件;2.在1的基础上遍历所有文件,使用File.Delete("文件完整路径")来删除每个文件;3.DirectoryInfo实例对象的GetDirectories文件获取所有的文件夹;4.在3的基础上遍历所有文件夹,使用DirectoryInfo实例的Delete方法删除对应的文件夹。第一种(不使用静态扩展方法),代码如下:
-
string directoryPath = "C:\指定的文件夹路径";
-
Directory.GetFiles(directoryPath).ToList().ForEach(File.Delete);
-
Directory.GetDirectories(directoryPath).ToList().ForEach(Directory.Delete);
第二种(使用静态扩展方法),代码如下:
public static void Empty(this System.IO.DirectoryInfo directory)
{
foreach(System.IO.FileInfo file in directory.GetFiles()) file.Delete();
foreach(System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
}
使用C#/.NET的静态方法的好处是,调用这个静态方法比普通的方法更方便,如:
-
System.IO.DirectoryInfo directory = new System.IO.DirectoryInfo(@"C:\指定的文件夹路径");
-
directory.Empty();