2011-07-07 13 views
14

私のコードです:完全な再帰的ディレクトリとファイルスキャンを実行するにはどうすればよいですか?ここ

private static void TreeScan(string sDir) 
    { 
     foreach (string d in Directory.GetDirectories(sDir)) 
     { 
      foreach (string f in Directory.GetFiles(d)) 
      { 
       //Save file f 
      } 
     } 
     TreeScan(d, client); 
    } 

問題は、それが(ディレクトリの開始)SDIRFILESを取得していないということですそれが唯一のサブフォルダにフォルダとファイルを取得します。

どうすればsDirからファイルを取得できますか?

答えて

8
private static void TreeScan(string sDir) 
{ 
    foreach (string f in Directory.GetFiles(sDir)) 
    { 
     //Save f :) 
    } 
    foreach (string d in Directory.GetDirectories(sDir)) 
    { 
     TreeScan(d); 
    } 
} 
1

あなたはThis sampleのよう

Directory.GetFiles(targetDirectory); 

を使用する必要があり、ウィッヒは、車輪の再発明のオーバーロードを使用しないでください何を

44

を探しているの完全な実装が含まれていますGetFilesを使用すると、サブディレクトリを検索するように指定できます。

string[] files 
    = Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories); 
+2

最後にある意味の人です。 –

+1

はい、再帰は最初にSystem.UnauthorizedAccessExceptionというフォルダで保護されていると失敗します。 – MuiBienCarlota

+0

検索パターンを必要としない場合は、検索パターンにアスタリスク(*)を使用してすべてのディレクトリを返すことができます –

2

コードにいくつかの問題があります。 1つは、あなたがルートフォルダからファイルを見たことがない理由は、あなたがやり直してファイルを読む前に再帰したからです。これを試してください:

public static void Main() 
{ 
    TreeScan(@"C:\someFolder"); 
} 

private static void TreeScan(string sDir) 
{ 
    foreach (string f in Directory.GetFiles(sDir)) 
     Console.WriteLine("File: " + f); // or some other file processing 

    foreach (string d in Directory.GetDirectories(sDir)) 
     TreeScan(d); // recursive call to get files of directory 
} 
0

GetFilesループはGetDirectoriesループの外にある必要があります。そして、あなたのTreeScanはGetDirectoriesループの中にとどまってはいけませんか? FX4を使用している場合

private static void TreeScan(string sDir) 
{ 
    foreach (string d in Directory.GetDirectories(sDir)) 
    { 
     TreeScan(d, client); 
    } 
    foreach (string f in Directory.GetFiles(d)) 
    { 
     //Save file f 
    } 
} 
0

EnumerateFiles方法上記GetFilesは、大きなディレクトリ(またはドライブ)上の最大のリソースを必要とすることができるのに対し、効率的なメモリ管理を持つすべてのファイルを返します。一言で言えば、コードは次のようになります。

var files = Directory.EnumerateFiles(dir.Path, "*.*"); 
関連する問題