FileSystemInfo[] Fsi = Di.GetFileSystemInfos(); DateTime dtNow = DateTime.Now; for (int i = 0; i < Fsi.Length; i++) { if (Fsi[i].Exists) { TimeSpan ts = dtNow.Subtract(Fsi[i].LastWriteTime); if (Fsi[i].GetType() == typeof(FileInfo))//如果是文件 { if (ts.TotalMinutes > 1)//距现在30分钟以上 Fsi[i].Delete();//删除该文件 } if (Fsi[i].GetType() == typeof(DirectoryInfo))//如果是文件夹 { //没有子文件或子文件夹 if (((DirectoryInfo)Fsi[i]).GetFileSystemInfos().Length == 0) Fsi[i].Delete();//直接删除文件夹 //包含有子文件或子文件夹 else if (((DirectoryInfo)Fsi[i]).GetFileSystemInfos().Length > 0) DelFile((DirectoryInfo)Fsi[i]);//递归函数本身 }
} } }
TO: fengling2001 谢谢回复。TO:mngzilin 我体会到了你的意思,是先把所有过期文件都删除,然后再在把空文件夹都删除,就达到我要的效果了,对吧。谢谢你的方法对我帮助很大。 但是我的目录内会有很多的文件,是否影响电脑效率呢,不知道是否有其他方法?请各位大哥指导我一下,小弟感激不尽,如果没有,我准备结贴了。
string[] Log1FileName = Directory.GetFiles( 文件夹 ); // 获取文件夹中所有文件名 Collections.IEnumerator myEnum = Log1FileName.GetEnumerator();while ( myEnum1.MoveNext() ) // 枚举所有文件
{
System.IO.File.GetCreationTime(myEnum1.Current->ToString()); // 获取文件创建时间
}
{
//在指定目录及子目录下查找文件,在listBox1中列出子目录及文件
DirectoryInfo Dir=new DirectoryInfo(dir);
try
{
foreach(DirectoryInfo d in Dir.GetDirectories()) //查找子目录
{
FindFile(Dir+d.ToString()+"\\");
listBox1.Items.Add(Dir+d.ToString()+"\\"); //listBox1中填加目录名
}
foreach(FileInfo f in Dir.GetFiles("*.*")) //查找文件
{
listBox1.Items.Add(Dir+f.ToString()); //listBox1中填加文件名
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}}
看了代码,不能满足我的需要,谢谢。
下面我写的代码遇到删除某一子目录内有文件,就报错。谁能帮我改改,可以直接删除子目录及其内所有文件。 DirectoryInfo di = new DirectoryInfo(@"E:\Images");
DirectoryInfo[] sudi = di.GetDirectories();
DateTime dtNow = DateTime.Now;
foreach (DirectoryInfo tmpdi in sudi)
{
if (tmpdi.Name != null)
{
TimeSpan ts = dtNow.Subtract(tmpdi.LastWriteTime);
if (ts.TotalMinutes > 30)//距现在30分钟以上
{
tmpdi.Delete();//删除文件
}
}
}TO:camperer
不好意思,我没有表达清楚,删除的时间只以其子目录最后修改时间为准(也可以创建时间)。子目录里不再有子目录了,且其内仅是jpg后缀图像文件,不管jpg文件的创建时间。
{
string[] folders = Directory.GetDirectories(path);
foreach (string folder in folders)
{
GetFiles(folder);
//递归调用搜索文件夹
GetFolders(folder);
}
}
//搜索path下的文件()
private void GetFiles(string path)
{
string[] files = Directory.GetFiles(path, txtPatten.Text);
foreach (string file in files)
{
lstFiles.Items.Add(file);//lst是一个ListBox的一个实例
lblFile.Text = file;
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(@"E:\Images");
DelFile(di);//此处一定要调用两次,具体原因自己体会
DelFile(di);
}
protected void DelFile(DirectoryInfo Di)
{
FileSystemInfo[] Fsi = Di.GetFileSystemInfos();
DateTime dtNow = DateTime.Now;
for (int i = 0; i < Fsi.Length; i++)
{
if (Fsi[i].Exists)
{
TimeSpan ts = dtNow.Subtract(Fsi[i].LastWriteTime);
if (Fsi[i].GetType() == typeof(FileInfo))//如果是文件
{
if (ts.TotalMinutes > 1)//距现在30分钟以上
{
Fsi[i].Delete();//删除该文件
}
}
if (Fsi[i].GetType() == typeof(DirectoryInfo))//如果是文件夹
{
if (((DirectoryInfo)Fsi[i]).GetFileSystemInfos().Length == 0)//没有子文件或子文件夹
{
if (ts.TotalMinutes > 1)//距现在30分钟以上
{
Fsi[i].Delete();//直接删除文件夹
}
}
else if (((DirectoryInfo)Fsi[i]).GetFileSystemInfos().Length > 0)//包含有子文件或子文件夹
{
DelFile((DirectoryInfo)Fsi[i]);//递归函数本身
}
}
}
}
}
}
下面是修改过的函数
protected void DelFile(DirectoryInfo Di)
{
FileSystemInfo[] Fsi = Di.GetFileSystemInfos();
DateTime dtNow = DateTime.Now;
for (int i = 0; i < Fsi.Length; i++)
{
if (Fsi[i].Exists)
{
TimeSpan ts = dtNow.Subtract(Fsi[i].LastWriteTime);
if (Fsi[i].GetType() == typeof(FileInfo))//如果是文件
{
if (ts.TotalMinutes > 1)//距现在30分钟以上
Fsi[i].Delete();//删除该文件
}
if (Fsi[i].GetType() == typeof(DirectoryInfo))//如果是文件夹
{
//没有子文件或子文件夹
if (((DirectoryInfo)Fsi[i]).GetFileSystemInfos().Length == 0)
Fsi[i].Delete();//直接删除文件夹
//包含有子文件或子文件夹
else if (((DirectoryInfo)Fsi[i]).GetFileSystemInfos().Length > 0)
DelFile((DirectoryInfo)Fsi[i]);//递归函数本身
}
}
}
}
谢谢回复。TO:mngzilin
我体会到了你的意思,是先把所有过期文件都删除,然后再在把空文件夹都删除,就达到我要的效果了,对吧。谢谢你的方法对我帮助很大。
但是我的目录内会有很多的文件,是否影响电脑效率呢,不知道是否有其他方法?请各位大哥指导我一下,小弟感激不尽,如果没有,我准备结贴了。
deltree c:\a
把a目录删除,不管是不是空的
不提示yes no
报的什么错?目录不是空的?
把tmpdi.Delete()改为tmpdi.Delete(true)
谢谢你的提醒,我按照你的方法做了, Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/c " + command;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
return p.StandardOutput.ReadToEnd(); 呵呵,不过我的系统为win server 2003,没有“deltree”,我用的“rd /s /q”测试成功。TO:camperer
是的,报错为目录不是空。呵呵,谢谢提醒,加(true)之后马上解决问题。为了这个问题我绕了好大一圈啊。
在这里感谢各位大哥的热情帮助,我以达到我需求的帖子平均给分结贴吧。再次感谢大家!