【C#】フォルダー内のファイル・フォルダーの一覧化プログラムを作成 その3
前回は、フォーム上にコントロールを配置し、ボタンを押下することでFolderBrowserDialogを表示する処理を作成しました。ダイアログでのディレクトリ指定後に実行されるLabelへのパスの表示、TextBoxへのファイル・フォルダーの一覧の表示は、GenerateListというメソッドを別に用意して行うこととしました。今回は、そのメソッドの中身を作成します。
コードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | private void GenerateList(string path) { label1.Text = path; if (Directory.Exists(path)) { List<string> names = new List<string>(); string[] fileNames = Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly); string[] directoryNames = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly); for (int i = 0; i < fileNames.Length; i++) { fileNames[i] = Path.GetFileName(fileNames[i]); } for (int i = 0; i < directoryNames.Length; i++) { directoryNames[i] = Path.GetFileName(directoryNames[i]); } names.AddRange(fileNames); names.AddRange(directoryNames); names.Sort(); StringBuilder stringBuilder = new StringBuilder(); foreach (string name in names) { stringBuilder.Append(name); stringBuilder.Append(Environment.NewLine); } textBox1.Text = stringBuilder.ToString(); } } |
このメソッドですが、引数pathにダイアログで指定されたディレクトリのパスを渡して使用するものとします。
はじめに、pathをLabelに表示する文字列に指定します。
それ以下の処理は、Directory.Existsメソッドでパスが存在している場合にのみ実行するようにしています。ダイアログから指定するので、存在しないパスが指定される可能性はないと思いますが、念のための処置です。
そして、パスが存在した場合、まずは、Directory.GetFilesメソッド、Directory.GetDirectoriesメソッドでパスのディレクトリ内に存在する全てのファイル及びディレクトリのパス一覧を取得します。どちらのメソッドも引数に(path, “*”, SearchOption.TopDirectoryOnly)を指定していますが、その詳細は以下の通りです。
第1引数は、検索対象のパスです。
第2引数には、検索条件を示す文字列を指定します。それはエクスプローラーで検索する際の文字列と同様で、”*”を指定すれば全てのファイルまたはディレクトリが対象となります。もし、GetFilesメソッドにおいて第2引数に”*.txt”を渡せばテキストファイルのみが対象となります。
第3引数には、SearchOption.TopDirectoryOnlyを指定することで、サブディレクトリ内を含まない検索結果が取得できます。SearchOption.AllDirectoriesをした場合は、サブディレクトリ以下も対象となります。
Directory.GetFilesメソッド、Directory.GetDirectoriesメソッドで取得した文字列はフルパスになっているため、Path.GetFileNameメソッドでファイル名のみを抜き出します。それから、string型のリストnamesに、ファイル名の一覧、ディレクトリ名の一覧の両方をAddし、ファイル名とディレクトリ名の混在したリストを作成します。そして、Sortメソッドによって昇順にソートします。
あとは、StringBuilderを使って一覧の文字列を作成し、それをtextBox1の文字列に指定します。これでファイル・フォルダー一覧を表示させる処理は一通り完成です。
しかし、問題があります。引数指定なしのSortメソッドは昇順ソートを行ってくれるのですが、エクスプローラーでは昇順ソートした場合とは少し挙動が異なるのです。このあたりは、次回に取り上げていくこととします。