あるフォルダ以下にあるサブフォルダをすべて取得する.NET Framework 2.0以降で、Directory.GetDirectoriesメソッドのみを使う指定したフォルダにあるすべてのサブフォルダのパスを取得するには、System.IO.Directory.GetDirectoriesメソッドを使います。GetDirectoriesメソッドは3番目のパラメータを省略(あるいは、SearchOption.TopDirectoryOnlyを指定)すると、指定したフォルダにあるサブフォルダしか取得せず、サブフォルダのサブフォルダは取得しません。サブフォルダのサブフォルダも含め、すべてのサブフォルダを取得するには、3番目のパラメータにSearchOption.AllDirectoriesを指定します。 以下の例では、フォルダ"C:\test"以下にあるサブフォルダのパスをすべて取得し、リストボックス(ListBox1)に表示しています。 '"C:\test"以下のサブフォルダをすべて取得する 'ワイルドカード"*"は、すべてのフォルダを意味する Dim subFolders As String() = System.IO.Directory.GetDirectories( _ "C:\test", "*", System.IO.SearchOption.AllDirectories) 'ListBox1に結果を表示する ListBox1.Items.AddRange(subFolders) //"C:\My Documents"以下のサブフォルダをすべて取得する //ワイルドカード"*"は、すべてのフォルダを意味する string[] subFolders = System.IO.Directory.GetDirectories( @"C:\test", "*", System.IO.SearchOption.AllDirectories); //ListBox1に結果を表示する ListBox1.Items.AddRange(subFolders);
補足:VB.NETではMy.Computer.FileSystem.GetDirectoriesメソッドでも同様のことができます。
.NET Framework 1.1以前.NET Framework 1.1以前では、Directory.GetDirectoriesメソッドに3番目のパラメータがありませんので、サブフォルダのサブフォルダまで取得できません。 例えば次のようなメソッドを作成することで、指定されたフォルダ以下のすべてのサブフォルダを取得することができるようになります。 ''' <summary> ''' 指定されたフォルダ以下のすべてのサブフォルダ名を取得する ''' </summary> ''' <param name="folderName">サブフォルダを調べるフォルダ名</param> ''' <param name="subFolders">取得したサブフォルダ名のリスト</param> Public Shared Sub GetSubfolders( _ ByVal folderName As String, ByRef subFolders As ArrayList) 'folderNameにあるサブフォルダを取得 Dim folder As String For Each folder In System.IO.Directory.GetDirectories(folderName) 'リストに追加 subFolders.Add(folder) '再帰的にサブフォルダを取得する GetSubfolders(folder, subFolders) Next folder End Sub /// <summary> /// 指定されたフォルダ以下のすべてのサブフォルダ名を取得する /// </summary> /// <param name="folderName">サブフォルダを調べるフォルダ名</param> /// <param name="subFolders">取得したサブフォルダ名のリスト</param> public static void GetSubfolders( string folderName, ref ArrayList subFolders) { //folderNameにあるサブフォルダを取得 foreach (string folder in System.IO.Directory.GetDirectories(folderName)) { //リストに追加 subFolders.Add(folder); //再帰的にサブフォルダを取得する GetSubfolders(folder, ref subFolders); } } このGetSubfoldersメソッドの使い方は次のような感じです。 Dim subFolders As New ArrayList '"C:\My Documents"以下のサブフォルダをすべて取得 GetSubfolders("C:\test", subFolders) 'ListBox1に結果を表示する ListBox1.Items.AddRange(subFolders.ToArray()) ArrayList subFolders = new ArrayList(); //"C:\My Documents"以下のサブフォルダをすべて取得 GetSubfolders(@"C:\test", ref subFolders); //ListBox1に結果を表示する ListBox1.Items.AddRange(subFolders.ToArray());
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright(C) DOBON!. All rights reserved.
|