使用C#递归删除一个文件夹
2013-03-25 22:15
423 查看
删除文件夹有时候并不是一件容易的事,特别是类似于boost解压出来的文件夹,其中的目录和文件太多,删除的时候,光弹出确认界面就要等好久好久。
最理想的情况是,我选中这个目录后,马上可以开始删除,然后我就可以站起来出去喝口水,或者去吃个饭,回来时世界已经清静了。
当然了,现在win7删除一个大目录时,速度已经相当快了,再加上电脑速度越来越快。自己写代码这种事纯粹是个人爱好,不见得速度比windows的删除速度快,本文只是记录一下这个想法的实际做法,免得需要的时候又琢磨半天。
自己创建一个窗口,用来接收选择目录等等操作,new 一个 DeleteRunner出来,然后把目录的路径传给其Delete函数即可。
class DeleteRunner
{
private string m_strRoot;
private int longDirNum = 0;
public DeleteRunner()
{
}
public void Delete(string strPath) //对外接口
{
m_strRoot = strPath;
_delete(strPath);
}
private void _delete(string strFolder)
{
//删除长路径, 把目录移动到根目录下再删除, 防止删除时的windows错误提示
if (strFolder.Length >= 160)
{
int pos = strFolder.LastIndexOf("\\");
if (pos == -1)
{
return;
}
++longDirNum;
string strDestDir = m_strRoot + "\\" + longDirNum;
Directory.Move(strFolder, strDestDir);
_delete(strDestDir);
return;
}
//删除目录下的所有文件
string[] listFiles = Directory.GetFiles(strFolder);
if (listFiles.Length > 0)
{
for (int index = 0; index < listFiles.Length; ++index)
{
FileInfo fi = new FileInfo(listFiles[index]);
fi.Attributes = FileAttributes.Normal; //防止有只读文件无法删除
File.Delete(listFiles[index]);
}
}
//删除此目录下的所有目录,即递归向下删
string[] listFolders = Directory.GetDirectories(strFolder);
if (listFolders.Length > 0)
{
for (int index = 0; index < listFolders.Length; ++index)
{
_delete(listFolders[index]);
}
}
//最后删除当前目录
Directory.Delete(strFolder);
}
}美中不足的时,这样删除时,还是会遇到一些问题,比如“目录不是空的”等等这些提示,不过小问题就不管了。
最理想的情况是,我选中这个目录后,马上可以开始删除,然后我就可以站起来出去喝口水,或者去吃个饭,回来时世界已经清静了。
当然了,现在win7删除一个大目录时,速度已经相当快了,再加上电脑速度越来越快。自己写代码这种事纯粹是个人爱好,不见得速度比windows的删除速度快,本文只是记录一下这个想法的实际做法,免得需要的时候又琢磨半天。
自己创建一个窗口,用来接收选择目录等等操作,new 一个 DeleteRunner出来,然后把目录的路径传给其Delete函数即可。
class DeleteRunner
{
private string m_strRoot;
private int longDirNum = 0;
public DeleteRunner()
{
}
public void Delete(string strPath) //对外接口
{
m_strRoot = strPath;
_delete(strPath);
}
private void _delete(string strFolder)
{
//删除长路径, 把目录移动到根目录下再删除, 防止删除时的windows错误提示
if (strFolder.Length >= 160)
{
int pos = strFolder.LastIndexOf("\\");
if (pos == -1)
{
return;
}
++longDirNum;
string strDestDir = m_strRoot + "\\" + longDirNum;
Directory.Move(strFolder, strDestDir);
_delete(strDestDir);
return;
}
//删除目录下的所有文件
string[] listFiles = Directory.GetFiles(strFolder);
if (listFiles.Length > 0)
{
for (int index = 0; index < listFiles.Length; ++index)
{
FileInfo fi = new FileInfo(listFiles[index]);
fi.Attributes = FileAttributes.Normal; //防止有只读文件无法删除
File.Delete(listFiles[index]);
}
}
//删除此目录下的所有目录,即递归向下删
string[] listFolders = Directory.GetDirectories(strFolder);
if (listFolders.Length > 0)
{
for (int index = 0; index < listFolders.Length; ++index)
{
_delete(listFolders[index]);
}
}
//最后删除当前目录
Directory.Delete(strFolder);
}
}美中不足的时,这样删除时,还是会遇到一些问题,比如“目录不是空的”等等这些提示,不过小问题就不管了。
相关文章推荐
- 递归的一些方法使用:深度遍历路径中的所有文件和目录,删除一个有文件的文件夹
- C#文件操作源码 递归复制一个目录 递归删除文件 和 文件夹
- C#文件操作源码 递归复制一个目录 递归删除文件 和 文件夹
- 递归遍历一个文件夹,对文件进行操作,使用lstat时的悲剧
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
- windows使用cmd快速删除一个文件夹
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件
- C# 递归 删除文件夹及子文件夹内文件
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 在lua中递归删除一个文件夹
- 分享一个Qt中删除文件夹的函数(非递归实现)
- [转]C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
- 使用递归打印出一个文件夹下所有子孙文件的树形结构
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
- Android 使用递归删除文件夹
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件
- 递归删除一个文件夹
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)