如何有效删除空目录(和空子目录)

时间:2015-01-07 10:40:42

标签: c# file-io

我已经编写了一个运动检测winform c#desktop app。

动画帧作为单独的jpeg保存到我的硬盘中。

我录制了4台摄像机。这由变量表示:

每个jpeg都在文件结构下:

c:\ The Year \ The Month \ The Day \ The Hour \ The Minute

...确保目录中的每个文件都没有太多文件。

我的目的是让我的应用程序全天候运行。该应用程序可能会因系统重启或用户选择暂时关闭它等原因而停止。

我需要删除超过24小时的文件。

我使用此代码来实现这一目标:

   Directory
        .GetFiles(Shared.MOTION_DIRECTORY, "*.*", SearchOption.AllDirectories)
        .Where(item =>
        {
            try
            {
                var fileInfo = new FileInfo(item);
                if (fileInfo.CreationTime < DateTime.Now.AddHours(-24))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        })
        .ToList()
        .ForEach(File.Delete);

然后我用它来删除目录:

            Directory
          .GetDirectories(Shared.MOTION_DIRECTORY, "*.*", SearchOption.AllDirectories)
           .Where(item =>
           {
               try
               {
                   var dirInfo = new DirectoryInfo(item);
                   if (dirInfo.CreationTime < DateTime.Now.AddHours(-24) && !dirInfo.EnumerateFiles().Any())
                   {
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               catch (Exception)
               {
                   return false;
               }
           })
           .ToList()
           .ForEach(Directory.Delete);

但当然如果有子目录(即使没有文件),删除目录时也会发生错误。

如果空或者是否有自动删除子文件夹的方法??

由于我的应用程序的性质,不用说这必须是一个低进程操作。

由于

2 个答案:

答案 0 :(得分:2)

是。使用允许递归删除的重载。

Directory.Delete(path, true)

http://msdn.microsoft.com/en-us/library/fxeahc5f%28v=vs.110%29.aspx

答案 1 :(得分:2)

使用overload with a bool并传递true以递归方式删除。这也会阻止抛出的IOException

.ForEach(f => Directory.Delete(f, true));
相关问题