using System; using System.IO; using System.Text.RegularExpressions; class App { static void Main() { Console.WriteLine("##########################【程序使用说明】############################"); Console.WriteLine("--目 的:本程序用来删除指定文件夹下包含指定字段的文件用--------------"); Console.WriteLine("--第一步:选择要进行处理的文件夹路径(提示:通过左上角进行粘贴)---------"); Console.WriteLine("--第二步:确认是否包含子文件夹文件------------------------------------"); Console.WriteLine("--第三步:输入要文件名匹配的字符串(如果匹配,则该文件将会被删除)-------"); Console.WriteLine("--第四步:确认执行删除操作,下面开始运行程序---------------------------"); Console.WriteLine("######################################################################"); Console.WriteLine("请输入目录名称:"); string strDirectoryName=Console.ReadLine(); DirectoryInfo myDI=new DirectoryInfo(strDirectoryName); //删除文件名包含指定字段的文件前 Console.WriteLine("是否包含子目录?YES | NO :"); string containChildren=Console.ReadLine().Trim(); Console.WriteLine("请输入匹配正则:"); string regStr=Console.ReadLine(); switch(containChildren.ToLower()) { case "yes": Console.WriteLine("删除文件名包含指定字段的文件前文件清单:"); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【删除前】文件名包含指定字段的文件清单:", w); } ShowDirectoryFilesAllLevel(myDI); Console.WriteLine("确认要删除吗?YES | NO :"); if(Console.ReadLine().ToLower()=="yes") { Console.WriteLine("删除文件名与"+regStr+"匹配的文件..."); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【删除】文件名与"+regStr+"匹配的文件:", w); } DeleteFilesAllLevel(myDI,regStr); //删除文件名包含指定字段的文件后 Console.WriteLine("删除文件名包含指定字段的文件后文件清单:"); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【删除后】文件夹下文件清单:", w); } ShowDirectoryFilesAllLevel(myDI); Console.WriteLine("执行完毕!按任意键继续..."); Console.Read(); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【执行完毕!】", w); } break; } else { break; } case "no": Console.WriteLine("删除文件名包含指定字段的文件前文件清单:"); ShowDirectoryFilesOneLevel(myDI); Console.WriteLine("确认要删除吗?YES | NO :"); if(Console.ReadLine().ToLower()=="yes") { Console.WriteLine("删除文件名与"+regStr+"匹配的文件..."); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【删除前】文件名包含指定字段的文件清单:", w); } DeleteFilesOneLevel(myDI,regStr); //删除文件名包含指定字段的文件后 Console.WriteLine("删除文件名包含指定字段的文件后文件清单:"); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【删除后】文件夹下文件清单:", w); } ShowDirectoryFilesOneLevel(myDI); using (StreamWriter w = File.AppendText("log.txt")) { Log ("【执行完毕!】", w); } break; } else { break; } default: Console.WriteLine("输入不正确,请输入单词:yes或No!"); break; } } //获取当前文件夹路径下文件 private static void DeleteFilesOneLevel(DirectoryInfo dir,string regStr) { FileInfo[] myFileInfo=dir.GetFiles(); foreach(FileInfo file in myFileInfo) { Regex regex1=new Regex(regStr); bool b=regex1.IsMatch(file.Name); if(b) { File.Delete(file.FullName); using (StreamWriter w = File.AppendText("log.txt")) { Log (" 删除文件:"+file.Name, w); } } } } private static void ShowDirectoryFilesOneLevel(DirectoryInfo dir) { FileInfo[] myFileInfo=dir.GetFiles(); if(myFileInfo.Length==0) { Console.WriteLine("当前目录下没有文件!"); using (StreamWriter w = File.AppendText("log.txt")) { Log (" 当前目录下没有文件!", w); } } else { foreach(FileInfo file in myFileInfo) { Console.WriteLine(" "+file.Name); using (StreamWriter w = File.AppendText("log.txt")) { Log (" 文件名称:"+file.Name, w); } } } } //递归获取文件夹下文件 private static void DeleteFilesAllLevel(DirectoryInfo dir,string regStr) { DirectoryInfo[] myDirectoryInfo = dir.GetDirectories();//获取子目录的名称 FileInfo[] myFileInfo = dir.GetFiles();//获取文件 if(myFileInfo.Length==0) { Console.WriteLine("当前目录下没有文件!"); using (StreamWriter w = File.AppendText("log.txt")) { Log (" 当前目录下没有文件!", w); } } else { foreach(FileInfo file in myFileInfo) { Regex regex1=new Regex(regStr); bool b=regex1.IsMatch(file.Name); if(b) { File.Delete(file.FullName); using (StreamWriter w = File.AppendText("log.txt")) { Log (" 删除文件:"+file.Name, w); } } } } foreach(DirectoryInfo DirInfo in myDirectoryInfo) { Console.WriteLine("文件夹:"+DirInfo.Name); using (StreamWriter w = File.AppendText("log.txt")) { Log ("文件目录:"+DirInfo.FullName, w); } DeleteFilesAllLevel(DirInfo,regStr); } } private static void ShowDirectoryFilesAllLevel(DirectoryInfo dir) { DirectoryInfo[] myDirectoryInfo = dir.GetDirectories();//获取子目录的名称 FileInfo[] myFileInfo = dir.GetFiles();//获取文件 foreach(FileInfo file in myFileInfo) { Console.WriteLine(" "+file.Name); using (StreamWriter w = File.AppendText("log.txt")) { Log (" 文件名称:"+file.Name, w); } } foreach(DirectoryInfo DirInfo in myDirectoryInfo) { Console.WriteLine("文件夹:"+DirInfo.Name); using (StreamWriter w = File.AppendText("log.txt")) { Log ("文件目录:"+DirInfo.FullName, w); } ShowDirectoryFilesAllLevel(DirInfo); } } public static void Log (String logMessage, TextWriter w) { w.WriteLine("{0} {1}", DateTime.Now.ToString(), logMessage); } }