您的位置:首页 > 编程语言 > C#

使用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);
}
}美中不足的时,这样删除时,还是会遇到一些问题,比如“目录不是空的”等等这些提示,不过小问题就不管了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐