public void FindAllFileAndDel(string path)//遍历目录,最后修改时间超过指定天数(addday)的文件就删除
        {
            DirectoryInfo[] ChildDirectory;//定义子目录集
            FileInfo[] NewFileInfo;//定义当前所有文件
            DirectoryInfo FatherDirectory = new DirectoryInfo(path); //定义当前目录
            ChildDirectory = FatherDirectory.GetDirectories("*.*"); //得到子目录集
            NewFileInfo = FatherDirectory.GetFiles();//得到文件集
            foreach (FileInfo fileinfo in FatherDirectory.GetFiles("*.*"))
            {
                DateTime dt = DateTime.Now.Date;                if (fileinfo.LastWriteTime.AddDays(addday) < dt)//假如最后修改时间是"addday"天之前则删除
                {
                    fileinfo.Delete();
                    ++filecount;
                }
            }
            foreach (DirectoryInfo dirInfo in ChildDirectory)
            {
                FindAllFileAndDel(dirInfo.FullName);
            }
        }        public void FindAllFolderAndDel(string path)//遍历目录,除主目录外空文件夹都删除
        {
            DirectoryInfo dirInfo = new DirectoryInfo(path);
            DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
            if (dirInfos != null && dirInfos.Length > 0)
            {
                foreach (DirectoryInfo childDirInfo in dirInfos)
                {
                    this.FindAllFolderAndDel(childDirInfo.FullName); //递归
                }
            }
            else
            {
                if (dirInfo.GetFiles().Length <= 0 && dirInfo.FullName != ReadPath("deletedays.xml"))//判断是否是空目录以及是否是根目录
                {
                    Directory.Delete(dirInfo.FullName, true); //删除目录
                    ++foldercount;
                }
            }
        }        private void button3_Click(object sender, EventArgs e)//立即清理过期目录和文件
        {
            FindAllFileAndDel(textBox1.Text);
            FindAllFolderAndDel(textBox1.Text);
        }
我的原意是过期的文件都删除,空文件夹也都删除,但是根目录不能删除。到底我哪里错了呢?

解决方案 »

  1.   

    你不想删除根目录,但你写的FindAllFolderAndDel方法里有删除根目录的逻辑。
    当第一个if不满足,就执行它的else,在else中,如果再满足嵌套if的条件,就会执行:"Directory.Delete(dirInfo.FullName, true); ",这条语句不就是删除根目录么。
      

  2.   

    我在删除目录语句的上面加了MessageBox.Show(dirInfo.FullName);
    MessageBox.Show(ReadPath("deletedays.xml"));才发现原来是大小写的缘故。低级错误 低级错误
      

  3.   

     Directory.Delete(dirInfo.FullName, true); //删除目录