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);
}
我的原意是过期的文件都删除,空文件夹也都删除,但是根目录不能删除。到底我哪里错了呢?
{
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);
}
我的原意是过期的文件都删除,空文件夹也都删除,但是根目录不能删除。到底我哪里错了呢?
当第一个if不满足,就执行它的else,在else中,如果再满足嵌套if的条件,就会执行:"Directory.Delete(dirInfo.FullName, true); ",这条语句不就是删除根目录么。
MessageBox.Show(ReadPath("deletedays.xml"));才发现原来是大小写的缘故。低级错误 低级错误