递归删除目录中的文件,但保持dir结构不变

时间:2012-11-28 11:22:46

标签: c# .net linq file linq-to-objects

为了清理测试文件,我尝试执行以下操作。但它不清除文件以及不生成错误。

我错过了一些明显的东西吗?

    private void CleanUpTempDirFiles()
    {
        var fileGenerationDir = new DirectoryInfo(Path.Combine(Path.GetTempPath(), "TestFilesDir"));

        fileGenerationDir.GetDirectories().ToList().ForEach(dir => dir.GetFiles().ToList().ForEach(file => file.Delete()));
    }

5 个答案:

答案 0 :(得分:9)

您可以使用SearchOption.AllDirectories

获取所有子目录中的所有文件
 fileGenerationDir.GetFiles("*", SearchOption.AllDirectories).ToList().ForEach(file=>file.Delete());

答案 1 :(得分:1)

这样做:

        string[] filePaths = Directory.GetFiles(
            Path.Combine(Path.GetTempPath(), "TestFilesDir")
            , 
            "*", 
            SearchOption.AllDirectories);

        foreach (var filePath in filePaths)
            File.Delete(filePath);

答案 2 :(得分:1)

您首先使用GetDirectories返回临时文件夹中的所有子目录。因此它不会返回此目录中的文件。所以你可能想要这样做:

var tempDir = Path.Combine(Path.GetTempPath(), "TestFilesDir");
var allFilesToDelete = Directory.EnumerateFiles(tempDir, "*.*", SearchOption.AllDirectories);
foreach (var file in allFilesToDelete)
    File.Delete(file);

删除ToLists并使用递归搜索的SearchOption.AllDirectories

How to: Iterate Through a Directory Tree (C# Programming Guide)

答案 3 :(得分:0)

如果文件存储在TestFilesDir文件夹中,则不必使用它的子目录,只需使用:

fileGenerationDir.GetFiles().ToList().ForEach(file => file.Delete());

否则您只删除子文件夹的文件

答案 4 :(得分:0)

private void CleanUpTempDirFiles() {
        var fileGenerationDir = new DirectoryInfo(
            Path.Combine(Path.GetTempPath(), "TestFilesDir"));

        fileGenerationDir.GetFiles().ToList().ForEach(file => file.Delete());            
    }