対象のディレクトリ内のファイルやディレクトリを列挙する
対象のディレクトリに存在するファイルやディレクトリを列挙する方法をご紹介します。
ファイルを列挙するには Directory.GetFiles を使います。
ディレクトリを列挙するには Directory.GetDirectorys を使います。
対象のディレクトリを c:/tmp とします。そのなかに下記のようなファイルやディレクトリをあらかじめつくっておいてテストしてみてください。
/output00
/output01.test
/output02.test
image00.bmp
image01.BMP
image10.jpg
image11.JPG
ディレクトリに拡張子的なものをつけるのはあまりないとは思いますが、いちおうテストのためそうしてください。
下記がソースコードです。サーチパターンが "*.bmp" であっても、bmp と BMP どちらも列挙してくれます。ありがたいような不便なような、Windows はファイルの大文字と小文字を区別しないからしょうがないですね。
また下記のソースコードでは SearchOption を SearchOption.TopDirectoryOnly として、検索対象のディレクトリに内包されているディレクトリのみの列挙ですが、もっと下層のディレクトリまで列挙したい場合は SearchOption.AllDirectories としてください。
using System.IO をお忘れなく.
// 検索対象のディレクトリ.
const String DIR_TARGET = "c:/tmp";
private void button1_Click( object sender, EventArgs e )
{
// ファイルを検索する.
String search_pattern = "*";
SearchOption sop = SearchOption.TopDirectoryOnly;
String [] arr = Directory.GetFiles( DIR_TARGET, search_pattern, sop );
// 結果をメッセージボックスで表示する.
if ( arr.Length <= 0 )
{
MessageBox.Show( "対象のファイルがありませんでした." );
}
else
{
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < arr.Length; n++ )
{
sb.AppendLine( arr[ n ] );
}
String msg = sb.ToString().Trim();
String cap = search_pattern;
MessageBox.Show( msg, cap );
}
}
private void button2_Click( object sender, EventArgs e )
{
// ファイルを検索する.
String search_pattern = "*.bmp";
SearchOption sop = SearchOption.TopDirectoryOnly;
String [] arr = Directory.GetFiles( DIR_TARGET, search_pattern, sop );
// 結果をメッセージボックスで表示する.
if ( arr.Length <= 0 )
{
MessageBox.Show( "対象のビットマップファイルがありませんでした." );
}
else
{
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < arr.Length; n++ )
{
sb.AppendLine( arr[ n ] );
}
String msg = sb.ToString().Trim();
String cap = search_pattern;
MessageBox.Show( msg, cap );
}
}
private void button3_Click( object sender, EventArgs e )
{
// ファイルを検索する.
String search_pattern = "*.jpg";
SearchOption sop = SearchOption.TopDirectoryOnly;
String [] arr = Directory.GetFiles( DIR_TARGET, search_pattern, sop );
// 結果をメッセージボックスで表示する.
if ( arr.Length <= 0 )
{
MessageBox.Show( "対象のジェイペグファイルがありませんでした." );
}
else
{
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < arr.Length; n++ )
{
sb.AppendLine( arr[ n ] );
}
String msg = sb.ToString().Trim();
String cap = search_pattern;
MessageBox.Show( msg, cap );
}
}
private void button4_Click( object sender, EventArgs e )
{
// ディレクトリを検索する.
String search_pattern = "*";
SearchOption sop = SearchOption.TopDirectoryOnly;
String [] arr = Directory.GetDirectories( DIR_TARGET, search_pattern, sop );
// 結果をメッセージボックスで表示する.
if ( arr.Length <= 0 )
{
MessageBox.Show( "対象のディレクトリがありませんでした." );
}
else
{
StringBuilder sb = new StringBuilder();
for ( int n = 0; n < arr.Length; n++ )
{
sb.AppendLine( arr[ n ] );
}
String msg = sb.ToString().Trim();
String cap = search_pattern;
MessageBox.Show( msg, cap );
}
}
ここからはおまけ情報、フルパスから、フォルダ名やディレクトリ名だけを抜き出すには GetFileName を使います。
フルパスから拡張子のないファイル名(ファイルタイトル)やフォルダ名(フォルダタイトル)を抜き出すには GetFileNameWithoutExtension を使います。
private void button5_Click( object sender, EventArgs e )
{
String fullpath_bmp = "c:/tmp/image100.bmp";
String msg = Path.GetFileNameWithoutExtension( fullpath_bmp );
MessageBox.Show( msg );
}
private void button6_Click( object sender, EventArgs e )
{
// ディレクトリに拡張子的なのものをつけるとファイルと見分けがつかない.
// なので拡張子なしのファイル名を取得するメソッドを使うのは問題がない.
String fullpath_dir = "c:/tmp/output100.test";
String msg = Path.GetFileNameWithoutExtension( fullpath_dir );
MessageBox.Show( msg );
}