結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

ディレクトリ(フォルダ)を再帰的に辿る方法


C#でちょっとしたアプリを作っているので、その過程で得た
テンプレ的なコードを備忘録として書いときます。


あるディレクトリを指定して、その配下のファイル一覧を得たり、
ディレクトリがあったらさらに辿るような処理をしたい場合に使うコード。

using System.IO;

private void listing( string startdir )
{
  foreach ( string file
            in Directory.GetFiles( startdir ) )
  {
    // TODO:ファイルが見つかったときの処理
  }

  foreach ( string dir 
            in Directory.GetDirectories( startdir ) )
  {
    // TODO:フォルダが見つかったときの処理

    listing( dir );
  }
}

上記変数fileには、ファイル名単体ではなく、そこまでのパスも含めた
絶対パスが入るのでご注意ください。


なお、不正なパスを指定した場合、
System.IO.DirectoryNotFoundExceptionがスローされるので、
listingメソッドのコール元では必ずこれをキャッチするようにしましょう。

private void analyzeButton_Click( object sender, EventArgs e )
{
  if ( targetPath == "" )
  {
    return;
  }

  // System.IO.DirectoryNotFoundException例外を
  // キャッチする
  try
  {
    listing( targetPath );
  }
  catch ( System.IO.DirectoryNotFoundException ex )
  {
    Console.WriteLine( ex.Message );
  }
}