根据时间删除指定文件夹下的文件

时间:2022-01-07 09:54:39

1.获取文件夹路径

2.定义一个计时器

3.定义锁

4.删除符合规则的文件

5.解锁

    /// <summary>   
    /// 根据时间来删除指定文件夹下的文件
    /// </summary>
    class Program
    {
        #region 私有静态字段定义
        private static string _directoryPath;
        private static readonly object Lock = new object();
        private static Timer timer; 
        #endregion

        #region 主方法
        static void Main(string[] args)
        {
            // 获取文件夹路径
            _directoryPath = GetDirectoryPath();

            timer = new Timer(10);

            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
            timer.Start();
            Console.Read();
        } 
        #endregion

        #region 私有静态方法
        /// <summary>
        ///  获取文件夹路径
        /// </summary>
        /// <returns></returns>
        private static string GetDirectoryPath()
        {
            // 获取当前基目录
            string baseDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

            // 使用appdomain获取当前应用程序集的执行目录
            string dir = AppDomain.CurrentDomain.BaseDirectory;

            // 使用path获取当前应用程序集的执行目录的上级的上级目录
            dir = Path.GetFullPath("../..");
            //Console.WriteLine("dir:" + dir);

            string imgDirPath = string.Format(@"{0}\\{1}", dir, "imgs");
            return imgDirPath;
        }

        static void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            // 执行完删除操作后解锁
            lock (Lock)
            {
                DeleteFile(_directoryPath);
            }
        }

        /// <summary>
        /// 删除文件夹下符合规则的文件。
        /// </summary>
        /// <param name="directoryPath">文件夹路径</param>
        private static void DeleteFile(string directoryPath)
        {// 获取指定目录下的文件集合
            var files = GetFilePaths();

            // 获取当前日期月份
            var currentMonth = DateTime.Now.Month;

            var filePaths = new List<string>();
            foreach (var file in files)
            {
                // 获取文件的创建时间
                var creationTime = File.GetCreationTime(file);
                //var lastWriteTime = File.GetCreationTime(file);

                // 如果是一个月之前的数据
                if (creationTime.Month <= currentMonth - 1)
                {
                    // 删除该文件
                    File.Delete(file);
                    Console.WriteLine("删除文件:" + file);
                }
            }
        }

        /// <summary>
        /// 根据文件夹路径取的文件名称集合。
        /// </summary>
        /// <param name="directoryPath"></param>
        /// <returns></returns>
        private static string[] GetFilePaths()
        {
            return Directory.GetFiles(_directoryPath);
        } 
        #endregion
    }