65.9K
CodeProject 正在变化。 阅读更多。
Home

用于删除指定目录下文件(基于用户输入时间戳)的控制台应用程序

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.94/5 (7投票s)

2004 年 7 月 9 日

3分钟阅读

viewsIcon

71414

downloadIcon

1018

在作为计划任务运行时非常有用,用于删除累积在目录中的不需要的文件。

引言

编写这段代码的需求是,我的一个团队成员需要一个脚本来根据他指定的时间删除文件。他有一个目录不断积累太多的垃圾文件,他必须手动进入并检查每个文件的最后修改时间并删除它们。 :)

虽然类似这样的应用程序肯定已经存在,但我只是为了好玩而选择编写了这个。

使用代码

由于这是一个控制台应用程序,您只需编译代码并运行 exe 即可测试基本应用程序。“DelFiles.exe”命令根据系统时间和用户指定时间之间的时间差删除指定目录中存在的文件。

逻辑非常简单。用户指定的时间跨度被添加到文件的最后写入时间。这个计算出的时间代表了文件之后必须被删除的时间。所以如果系统时间超过了计算出的文件时间,就意味着文件的生命周期已经结束,它将被删除。

我设置的默认值是

初始目录:C:\SomeDirectory(这显然会抛出一个错误消息:))

要添加到上次写入时间的时间:30 分钟

该命令的开关如下。所有开关都是可选的。

delfiles [/dir=] [/d=] [/h=] [/m=] [/s=] [/?] 
  • [/dir=] --> 输入目录的完整路径。示例:c:\www\myDirectory
  • [/d=] --> 输入天数,作为整数值。最大值为 60。高于 60 该值默认为 0。
  • [/h=] --> 输入小时数,作为整数值。最大值为 48。高于 48 该值默认为 0。
  • [/m=] --> 输入分钟数,作为整数值。最大值为 120。高于 120 该值默认为 30。
  • [/s=] --> 输入秒数,作为整数值。最大值为 300。高于 120 该值默认为 0。
  • [/?] --> 显示帮助屏幕

注意:如果您包含天数以及分钟等选项的值,它们将被添加到您的最终时间戳值中。

代码的关键部分如下所示

//Run through every file and delete if needed.
//If no files then no problems. The program stops thats all.
//==============================
foreach (FileInfo f in dirInfo.GetFiles())
{
    Console.WriteLine("{0,40}{1,10}{2,25}",
        f.Name, f.Length, f.LastWriteTime);
    
    DateTime systemDt = DateTime.Now;
    DateTime fileDt = f.LastWriteTime;
    DateTime cpmTime;
    //IF SYSTEM TIME < FILE WRITE TIME - send a warning message
    //since anyway the file won't be deleted with the current logic
    if (f.LastWriteTime > systemDt)
        Console.WriteLine("Some one messed the system clock or "+
        "the file write time was in a different time zone!!!");

    //USE THE DEFAULT VALUES
    if (boolDefaultTime == true)
    {
        cpmTime = fileDt + diffTSpan;                                
    }
    else    //USING USER INPUTTED VALUES
    {
        TimeSpan customTSpan = new TimeSpan(intDays,
          intHours, intMinutes, intSeconds);
        cpmTime = fileDt + customTSpan;                                
    }                            

    Console.WriteLine(cpmTime.ToLongDateString());
    Console.WriteLine(cpmTime.ToLongTimeString());
                            
    //CHECKING IF THE FILE LIFE TIME IS MORE THAN THE
    //CURRENT SYSTEM TIME. IF YES FILE IS VALID
    if (DateTime.Compare(cpmTime, systemDt) > 0)
        Console.WriteLine("Still Valid!");
    else    //CHECKING IF THE FILE LIFE TIME IS <= THE
    //CURRENT SYSTEM TIME. IF YES - FILE IS SET FOR DELETION
    {
        Console.WriteLine("{0} file is being deleted!", f.Name);
        f.Delete();
        Console.WriteLine("{0} file has been deleted!", f.Name);
    }
    
    Console.WriteLine("\n");
    
}

关注点

这是一个非常简单的应用程序,但它非常有用。您可以修改代码,以便您可以接受要监视的目录数组。您还可以使代码递归遍历目录或目录中存在的子目录。上述任务可以根据您的需要轻松定制(我只提供基本框架:))。完成自定义后,编译代码以生成 exe。然后编写一个简单的批处理文件,其中包含适当的时间戳,并通过 Windows 计划程序运行它。因此,每次任务运行时,指定文件夹中所有文件的最新写入时间都会添加到您预定义的时间戳中,然后与系统时间进行比较。当文件的期限到了,它就会被删除!

我在演示 zip 文件中附加了一个名为 test.bat 的示例批处理文件。请务必提供正确的目录名称。否则,您的一些重要文件将在您眼前被删除,除了可能嘲笑自己之外,您无能为力:)

关于我

一个靠编程谋生的普通人 ^_^

© . All rights reserved.