2009-05-29 67 views
9

如何在C#中遞歸地刪除給定的dir? System.IO.Directory.Delete與第二個參數是否真的有用嗎?在C中遞歸刪除文件和目錄#

編輯:我的意思是一個包含文件的目錄:D對不起,誤會了。編輯2:所以,我其實回答了我自己的問題,雖然這裏的答案是更清晰一點。我之所以首先問這個問題的原因是,正好具有Delete(第二個參數設置爲true)的調用的代碼沒有做它應該做的事情。事實證明,原因是在RO屬性設置的目錄層次結構中存在一個文件,而波蘭語版本的Windows XP則拋出了一個非常奇怪的消息。

+1

我想你已經自己給出了答案:-) – 2009-05-29 09:43:07

+0

這似乎一個奇怪的問題。 提問者已經知道第二個參數,它是一個名爲「遞歸」的布爾值。 你基本上說「我該怎麼做遞歸?我設置遞歸爲真?」 – joshcomley 2009-05-29 09:53:51

+0

好的,也許編輯澄清。該目錄包含一些文件... – 2009-05-29 09:57:16

回答

8

是的,這就是該參數的要點。你有沒有嘗試過,並有任何問題? (我剛剛檢查過,並且對我來說工作正常)。

+2

雖然它的價值確保首先在您的路徑中沒有隻讀文件/目錄。一段時間以來,這使我產生了一些問題。 – Pondidum 2009-05-29 09:50:05

+0

這正是事情。謝謝你的提示:D – 2009-05-29 18:02:47

3

遞歸適用於文件和文件夾(奇怪的是,我認爲它不適用於文件;我的不好...):

// create some nested folders... 
Directory.CreateDirectory(@"c:\foo"); 
Directory.CreateDirectory(@"c:\foo\bar"); 
// ...with files... 
File.WriteAllText(@"c:\foo\blap.txt", "blup"); 
File.WriteAllText(@"c:\foo\bar\blip.txt", "blop"); 
// ...and delete them 
Directory.Delete(@"c:\foo", true); // fine 
13

是爲我工作,如果子目錄還包含文件的唯一的解決辦法是通過使用遞歸函數:

public static void RecursiveDelete(DirectoryInfo baseDir) 
    { 
     if (!baseDir.Exists) 
      return; 

     foreach (var dir in baseDir.EnumerateDirectories()) 
     { 
      RecursiveDelete(dir); 
     } 
     baseDir.Delete(true); 
    } 

看來,Directory.Delete(DIR,真)只刪除當前目錄下的文件,如果它們是空的,則是子目錄。

希望它可以幫助別人。