如何删除所有文件但保持目录结构不变? [复制]

Posted

技术标签:

【中文标题】如何删除所有文件但保持目录结构不变? [复制]【英文标题】:How to delete all files but leave directory structure intact? [duplicate] 【发布时间】:2013-04-13 05:47:33 【问题描述】:

我想删除一个文件夹中的所有文件,并删除其所有子文件夹中的所有文件,以及子子文件夹等,但我不想删除文件夹本身。

最简单的方法是什么?

【问题讨论】:

@Woot4Moo:不,因为这特别要求不要删除目录中的文件夹。 为什么所有的反对票? @Jeff 我猜这主要是因为他真的只需要学习如何遍历文件并且有很多关于如何做到这一点的信息。然而,这是一个相当过分的。这里的人只是喜欢抨击初级程序员/SO 用户,而不是帮助他们。 @Jeff 但该答案也包含在帖子中。 OP 应该搜索而不是用已经回答的问题淹没网站。 @Woot4Moo 是的,我不同意这一点。我理解你投反对票的原因。只是在它有几个downvotes之后,我不会继续堆积它们。我确定 OP 在 2 次投票后已经感觉很愚蠢(我知道当我被投票时我会这样做),他们不需要 10 次。 【参考方案1】:
foreach (var file in Directory.EnumerateFiles("path", "*", System.IO.SearchOption.AllDirectories))

    //TODO consider error handling
    File.Delete(file);

【讨论】:

+1 使用内置的恕我直言要好得多。【参考方案2】:
  static void DirSearch(string sDir)
   
       try
       
           foreach (string d in Directory.GetDirectories(sDir))
           
               foreach (string f in Directory.GetFiles(d))
               
                   //Delete files, but not directories
                   File.Delete(f);
               
               //Recursively call this method, so that each directory
               //in the structure is wiped
               DirSearch(d);
           
       
       catch (System.Exception excpt)
       
           Console.WriteLine(excpt.Message);
       
   

【讨论】:

与其使用自己的递归函数手动遍历,不如使用库方法,这样可以更有效地完成(并且不使用递归,因此消除了堆栈溢出异常的可能性)。 另外,如果你想在删除失败的情况下继续删除文件,你可以将 try/catch 移动到内部的foreach。不过,您可能希望记录失败并返回一个状态。 @Servy 是的,这是一个很好的解决方案,也许更好。我宁愿展示它实际上是如何工作的。我不喜欢神奇地工作的超高级抽象,我认为建议初学者使用它们不是一个好主意。 @evanmcdonnal 如果您的方法同样有效,那很好。如果不建议使用库方法并出于学术目的显示自定义的“类似”方法,则更好。实际上应该不鼓励在生产代码中使用像你这样的方法(原样)。

以上是关于如何删除所有文件但保持目录结构不变? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

php如何复制文件和子文件夹中的文件到指定目录,保持路径顺序不变

linux下如何删除目录

将文件从多个(指定)文件夹路径复制到另一个目录,同时保持文件结构

SHELL编程练习-复制指定文件(保持文件所在目录结构)

Linux文件的基础操作命令

rm 命令(删除文件和目录)