求助大家!C#删除文件夹下的多级子文件夹和文件,总是感觉少层循环,大家看一下是哪少了?目录是d:\aa
其下是d:\aa\ABC\123\a.inf
      d:\aa\EFG\456\b.inf已知目录d:\aa,现在想删除d:\aa下的所有子文件夹和文件。
用c#递归,代码如下:我是调用这个dll文件,调用后它每次先删除一下子文件夹下的文件,然后就只删除此空文件夹就退出了,其它的根本没有删除,但是不知在哪再加一个循环,请教大家!!
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Clear
{
    public class Cleardirectory
    {
        public String dir = "";  //dir=d:\aa
        public Cleardirectory()
        {
            targetObject = this;        }        public void ClearDirectory()
        {            while (Directory.Exists(dir))     //d:\aa
            {                foreach (string d in Directory.GetFileSystemEntries(dir)) //
                {
                    if (File.Exists(d))
                    {                        FileInfo fi = new FileInfo(d);
                        if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
                            fi.Attributes = FileAttributes.Normal;
                        File.Delete(d);                    }
                    else
                    {
                        dir = d;
                        ClearDirectory();
                    }
                    Directory.Delete(dir, false);
                }            }

解决方案 »

  1.   

    搂主这个深度删除文件的方法是错误的。之前在下面贴中有个关于递归文件列表的回复,搂主可以参考参考:
    http://topic.csdn.net/u/20081206/19/f1ec5adc-5df3-4764-8f13-cb4454672c28.html
      

  2.   

    另外,Directory.Delete的方法已经可以深度递归删除文件和子目录了
      

  3.   

    直接给搂主写个代码吧:private void DeleteInDir(string szDirPath)
    {
        if (szDirPath.Trim() == "" || !Directory.Exists(szDirPath))
            return;
        DirectoryInfo dirInfo = new DirectoryInfo(szDirPath);    FileInfo[] fileInfos = dirInfo.GetFiles();
        if (fileInfos != null && fileInfos.Length > 0)
        {
            foreach (FileInfo fileInfo in fileInfos)
            {
                File.Delete(fileInfo.FullName); //删除文件
            }
        }    DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
        if (dirInfos != null && dirInfos.Length > 0)
        {
            foreach (DirectoryInfo childDirInfo in dirInfos)
            {
                this.DeleteInDir(childDirInfo); //递归
            }
        }
        Directory.Delete(dirInfo.FullName, true); //删除目录
    }搂主注意要抓些异常,比如上面的删除目录和文件这两个操作,还有获取目录和文件列表这两个操作
      

  4.   

    噢,这里this.DeleteInDir(childDirInfo); //递归
    应该改成:this.DeleteInDir(childDirInfo.FullName); //递归
      

  5.   

     /// <summary>
            ///方法二 删除目录再创建相同目录
            /// </summary>
            /// <param name="strDir">目录地址</param>
            public static void deleteFiles(string strDir)
            {
                if (Directory.Exists(strDir))
                {
                    Directory.Delete(strDir, true);
                    Directory.CreateDirectory(strDir);
                    MessageBox.Show("文件删除成功!!");
                }
                else
                {
                    MessageBox.Show("此目录不存在!");
                }
            }