2012-11-28 91 views
5

爲了清理測試文件,我試圖執行以下操作。但它不清除文件以及不產生錯誤。從目錄中遞歸刪除文件,但保持目錄結構完好

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

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

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

試用調試器。它可以幫助您確定程序在運行時的功能。這比在代碼中尋找錯誤的方法要好得多。 – usr

+0

是不是這個代碼示例刪除您的子文件夾中的文件?或者你想刪除主文件中的文件? –

+0

這不是完全遞歸的。它只會刪除(理論上)直接位於頂層目錄下的目錄中的文件。這是意圖嗎? – wdavo

回答

8

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

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

如果文件被存儲在TestFilesDir文件夾內你沒有得到它的子目錄,使用簡單:

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

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

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

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

這將做到這一點:

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

     foreach (var filePath in filePaths) 
      File.Delete(filePath); 
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)