2009-05-29 50 views
9

C#で再帰的に指定されたdirを削除する方法は? 2番目のパラメータがtrueのSystem.IO.Directory.Deleteでトリックを行う必要がありますか?C#でファイルとディレクトリを再帰的に削除する

編集:私はファイルを含むディレクトリを意味しました:D誤解して申し訳ありません。

EDIT2:私は実際に私自身の質問に答えましたが、答えはもう少し明確でした。最初にこれを尋ねたのは、Delete(2番目のパラメータがtrueに設定されている)を呼び出すコードが、実行していたことをやっていないということでした。その原因は、RO属性が設定されたディレクトリ階層のどこかにファイルがあり、Windows XPのポーランド語版が本当に奇妙なメッセージを投げかけていたことが判明しました。

+1

私はあなたがすでに奇妙な質問を思えん –

+0

この:-)答えを自分で与えたと思います。 askerはすでに2番目のパラメータを知っています。これは "再帰的"と呼ばれるブール値です。 基本的には「再帰的に行うにはどうすればよいですか?再帰的に真実に設定しますか? – joshcomley

+0

OK、おそらく編集が明確になります。ディレクトリにはいくつかのファイルが含まれています... –

答えて

8

うん、それはそのパラメータのポイントです。それを試して何か問題がありましたか?

+2

最初にあなたのパスに読み取り専用のファイル/ディレクトリがないことを確認する価値はありますが。それは私にいくつかの問題を引き起こした。 – Pondidum

+0

それはまさに事である。 D –

+0

サブディレクトリにもファイルが含まれていると、私のために働いていませんでした。 –

3

ファイルとフォルダの両方の再帰的な作業(奇妙なことに、ファイルでは機能しないと思っていましたが、私の悪い...):

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

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

Directory.Delete(dirは、真)のみカレントディレクトリのファイルを削除することが表示されます:

// 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 
+4

コードにバグがあります。明らかにbaz.txtでなければなりません。 –

+0

; -p(--buffer--) –

13

サブディレクトリもファイルが含まれている場合、私のために働いた唯一の解決策は、再帰関数を使用することです、およびサブディレクトリが空の場合

誰かを助けることを願っています。

+1

これは実際の回答です – Seth

+0

"baseDir.Delete"はもうarroundではないフォルダを削除しようとするので、これは私には面白いです。 –

関連する問題