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);
}
}