2016-12-04 18 views
0

我试图清理我的lightroom文件夹,并发现有时存在隐藏的文件留下来移动它们周围的文件。试图删除空的文件夹,或只有隐藏的文件在

我做了一些搜索,并能建立这个怪人的功能,但每一次它试图删除一个空文件夹,我得到一个错误,指出该文件夹是由另一个进程使用....

基本上我试图通过所有文件夹重复并删除那些空的子文件夹,或者只包含隐藏文件的文件夹。如果没有文件(或只有隐藏文件)包含在其中,则该过程应该重复通过删除其子代的所有文件夹以及最终的父文件夹。

任何帮助或建议将不胜感激!

干杯!

private static void processDirectory(string startLocation) 
    { 
     //For every folder in this folder, recurse into that folder and take a peek... 
     foreach (var directory in Directory.GetDirectories(startLocation)) 
     { 
      processDirectory(directory); 
      //Get a handle to the directory to get files and whatnot from.... 
      DirectoryInfo di = new DirectoryInfo(directory); 
      FileInfo[] files = di.GetFiles(); 

      //We want to ignore any hidden files in the directory 
      var filtered = files.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden)); 

      //Make sure there are no other files or directories behind this one 
      if (filtered.Count() == 0 && Directory.GetDirectories(directory).Length == 0) 
      { 
       //Okay it's safe, delete it now. 
       di.Delete(); 
      } 
     } 
    } 
+0

(注意:我没有运行它来尝试,所以这只是猜测):在发布目录之前需要处理“di”吗? – ClickRick

+0

使用Process Explorer找出锁定目录的进程。即使Lightroom未运行,最有可能的一些Adobe服务仍在运行。 –

+0

我认为这可能与操作系统有关。该文件还不完全“发布”。不确定'释放'是否是正确的词。但我们之前有这个问题。当我们试图删除上一步创建的一些文件时,它可能会显示此异常。我们必须使用循环,删除文件,然后检查文件是否存在,如果是,则等待一段时间,10/100ms,然后再次删除。我们循环3次。这似乎解决了这个问题。 – urlreader

回答

0

那么如果这不足够奇怪,今天早上当我运行代码时,它工作得很好!?我的文件夹已被剪掉,只有那些实际上有照片的文件夹,而且生活很好。
我必须做的一件事是将true添加到di.Delete()函数。这是因为该功能停止在其中隐藏文件的文件夹中。
我认为这是沿着Chris上面发布的内容的某些东西,而某些潜在功能仍然是从Adobe打开的。

感谢大家发布的回复!

干杯!

相关问题