2009-09-02 15 views
1

私は、フォルダのパスをアプリケーションに渡して、そのフォルダの内容全体にプログラムを実行させ、ネストされたフォルダやファイルを含め、特定の名前を持つフォルダを削除したいと考えています。C#Winforms - 特定のファイル名のハードドライブ上のフォルダを削除しますか?

私はこれを行う潜在的な方法を見回しましたが、良い文書を見つけることはできません。

助けていただければ幸いです。

敬具、

+0

あなたの質問には、特定のファイル名を探したいのですが、質問には特定のフォルダ名が記載されています。どちらがいいですか? –

答えて

5

は、指定した名前と一致する最初のディレクトリ内で見つかった任意のディレクトリを削除している。このようなもの試してみてください:

public void RecursiveDelete(string path, string name) 
    { 
    foreach (string directory in Directory.GetDirectories(path)) 
    { 
     if (directory.EndsWith("\\" + name)) 
     { 
      Directory.Delete(directory, true); 
     } 
     else 
     { 
      RecursiveDelete(directory, name); 
     } 
    } 
    } 

をそしてRecursiveDelete("initial path", "name of directory to delete");

0

囲碁再帰的に呼び出します。基本的には

、その引数としてフォルダ名をとる関数を持っており、それが文字列[]それは、パラメータとしてそれぞれの新しい文字列で自身を呼び出し、返すを反復処理、Directory.GetDirectories()を呼び出す必要があり、その後の呼び出しDirectory.GetFiles()またはその関数があったものと削除したもの。返ったら、そのフォルダを削除します。

ですから、フーから開始

c.txt はFoo \バーB.TXT はFoo \ はFoo \バー\ A.TXT フー はFoo \を持っている、それはバーを検出し、再帰的に思いを想像それ。 バーではフォルダが見つからないので、そこから再帰する必要はありません。 c.txtを見つけると、それは削除されます。 Fooに戻ると、Barが削除され、a.txtとb.txtがそれぞれ削除されます。

簡単。

0

MSDNを確認しましたか? Directory classここにあなたの友人のようになります

public void DeleteFiles(string path, string toDelete) 
    { 
     if(Directory.Exists(path)) 
     { 
      foreach(string folder in Directory.GetDirectories(path)) 
      { 
       if(toDelete == Path.GetDirectoryName(folder)) 
       { 
        DeleteFilesInFolder(folder); 
        Directory.Delete(folder); 
       } 
      } 
     } 
    } 

あなたは最初のフォルダ内のファイルを削除する必要がありますが、この方法はほとんど同じです。

+0

@ Donutの答えは私よりはるかに優れています.Directory.Delete(path、true)を実行すると、ファイルを削除する関数は必要ありません。また、私はそれを再帰的にしませんでした。 –

関連する問題