C# 根据指定路径、文件格式、创建日期清理文件夹内文件,包括子目录
using System;
using System.Configuration;
using System.IO;
namespace CleanFile
{
class Program
{
static void Main(string[] args)
{
#region 删除曲线文件,测试可用
//Console.Write("\n输入要操作的文件路径,回车结束!\n");
DateTime dateNow = DateTime.Now;
Console.WriteLine("清理开始:" + dateNow);
//string folderPath = Console.ReadLine();//从控制台读入输入
//DateTime targetDate = new DateTime(2023, 1, 1); // 设置目标日期(此处为2023年1月1日)
DateTime targetDate = Convert.ToDateTime(ConfigurationManager.AppSettings["targetDate"].ToString()); // 设置目标日期(此处为2025年1月1日)
string folderPath = ConfigurationManager.AppSettings["folderPath"].ToString();
string fileExtension = ConfigurationManager.AppSettings["fileExtension"].ToString();
DeleteFilesBeforeTargetDate(folderPath, targetDate, fileExtension);
Console.WriteLine("清理完毕" + DateTime.Now + ",耗时:" + (DateTime.Now - dateNow).TotalSeconds + ",按回车退出!");
Console.ReadLine();
#endregion
#region 移动曲线文件
//if (args.Length == 0)
//{
// Console.WriteLine("命令行参数不能为空...");
// Console.ReadKey();
// return;
//}
//string folder = args[0];
//if (!Directory.Exists(folder))
//{
// Console.WriteLine("输入的文件夹路径不存在...");
// Console.ReadKey();
// return;
//}
//Console.WriteLine("准备移动曲线文件...");
//string[] subfolders = Directory.GetDirectories(folder);
//int total = 0;
//for (int i = 0; i < subfolders.Length; i++)
//{
// string[] files = Directory.GetFiles(subfolders[i], "*.xml");
// total += files.Length;
// Console.WriteLine($"当前文件夹【{subfolders[i]}】内文件数有{files.Length}个.");
// foreach (var file in files)
// {
// string sub = File.GetLastWriteTime(file).ToString("yyyy-MM-dd");
// string filenames = Path.GetFileName(file);
// string foldr = Path.GetDirectoryName(file);
// string newfoldr = foldr + "\\" + sub;
// try
// {
// if (!Directory.Exists(newfoldr))
// {
// Directory.CreateDirectory(newfoldr);
// }
// File.Move(file, newfoldr + "\\" + filenames);
// Console.WriteLine($"文件【{file}】已经移到新路径{sub}.");
// }
// catch (Exception ex)
// {
// Console.WriteLine(ex);
// }
// }
//}
//Console.WriteLine($"移动曲线文件工作已完成,共移动{total}个文件.");
//Console.ReadKey();
#endregion
#region 删除曲线文件,测试可用
if (args.Length == 0)
{
Console.WriteLine("命令行参数不能为空...");
Console.ReadKey();
return;
}
string folder = args[0];
//Console.Write("\n输入要操作的文件路径,回车结束!\n");
//string folder = Console.ReadLine();//从控制台读入输入
//if (!Directory.Exists(folder))
//{
// Console.WriteLine("输入的文件夹路径不存在...");
// Console.ReadKey();
// return;
//}
//Console.WriteLine("准备删除曲线文件...");
//string[] subfolders = Directory.GetDirectories(folder);//获取当前目录下所有子文件夹目录
//int total = 0;
//for (int i = 0; i < subfolders.Length; i++)//遍历子文件夹目录
//{
// string[] files = Directory.GetFiles(subfolders[i], "*.xml");
// total += files.Length;
// Console.WriteLine($"当前文件夹【{subfolders[i]}】内文件数有{files.Length}个.");
// foreach (var file in files)
// {
// //string sub = File.GetLastWriteTime(file).ToString("yyyy-MM-dd");
// //string filenames = Path.GetFileName(file);
// //string foldr = Path.GetDirectoryName(file);
// //string newfoldr = foldr + "\\" + sub;
// try
// {
// //if (!Directory.Exists(newfoldr))
// //{
// // Directory.CreateDirectory(newfoldr);
// //}
// //File.Move(file, newfoldr + "\\" + filenames);
// //Console.WriteLine($"文件【{file}】已经移到新路径{sub}.");
// DateTime TargetDate = new DateTime(2025, 1, 1); // 设置目标日期(此处为2025年1月1日)
// if(File.GetLastWriteTime(file)< TargetDate)
// {
// File.Delete(file);
// Console.WriteLine($"文件【{file}】已删除.");
// }
// }
// catch (Exception ex)
// {
// Console.WriteLine(ex);
// }
// }
//}
//Console.WriteLine($"移动曲线文件工作已完成,共移动{total}个文件.");
//Console.ReadKey();
#endregion
}
/// <summary>
/// 删除指定路径中指定日期前的文件
/// </summary>
/// <param name="folderPath">指定路径</param>
/// <param name="targetDate">指定日期</param>
static void DeleteFilesBeforeTargetDate(string folderPath, DateTime targetDate, string fileExtension)
{
try
{
if (!Directory.Exists(folderPath))
{
Console.WriteLine("输入的文件夹路径不存在...");
Console.ReadKey();
return;
}
DirectoryInfo directory = new DirectoryInfo(folderPath);
foreach (var file in directory.EnumerateFiles())
{
//if (file.LastWriteTime < targetDate && file.Extension == fileExtension)
Console.WriteLine($"文件【{file.FullName}】,LastWriteTime【{file.LastWriteTime}】,targetDate【{targetDate}】");
if (file.LastWriteTime < targetDate)
{
Console.WriteLine("DeleteFilesBeforeTargetDate:" + DateTime.Now);
File.Delete(file.FullName);
Console.WriteLine($"文件【{file.FullName}】已删除.");
}
}
foreach (var subdirectory in directory.EnumerateDirectories())
{
DeleteFilesBeforeTargetDate(subdirectory.FullName, targetDate, fileExtension);
}
}catch(Exception ex)
{
Console.WriteLine($"发生异常【{ex.StackTrace.ToString()}】.");
}
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
<appSettings>
<!--<add key="folderPath" value="G:\\test" />-->
<add key="folderPath" value="D:\Mes\Curve Files" />
<add key="fileExtension" value=".xml" />
<add key="targetDate" value="2023/07/01" />
</appSettings>
</configuration>