簡體   English   中英

遞歸刪除目錄中的文件,但保持dir結構不變

[英]Recursively delete files from a Directory but keeping the dir structure intact

為了清理測試文件,我嘗試執行以下操作。 但它不清除文件以及不生成錯誤。

我錯過了一些明顯的東西嗎

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

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

您可以使用SearchOption.AllDirectories獲取所有子目錄中的所有文件

 fileGenerationDir.GetFiles("*", SearchOption.AllDirectories).ToList().ForEach(file=>file.Delete());

這樣做:

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

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

您首先使用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

如何:通過目錄樹進行迭代(C#編程指南)

如果文件存儲在TestFilesDir文件夾中,則不必使用它的子目錄,只需使用:

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

否則你只刪除子文件夾的文件

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM