■■■

2016年4月9日土曜日

サブフォルダを再帰検索して全フォルダを取得する方法

サブフォルダを再帰検索して全フォルダを取得する方法
VB.NET
    ''' <summary>
    ''' サブフォルダを全て検索する方法
    ''' (サブフォルダを再帰的に検索する)
    ''' </summary>
    ''' <param name="strRoot"></param>
    ''' <param name="strExp"></param>
    ''' <returns></returns>
    Public Shared Function SearchSubFolder(strRoot As String, strExp As String) As String()
        ' 初期化
        Dim scPath As System.Collections.Specialized.StringCollection = (New System.Collections.Specialized.StringCollection())

        ' カレントディレクトリを検索
        For Each strFileName As String In System.IO.Directory.GetFiles(strRoot, strExp)
            scPath.Add(strFileName)
        Next

        ' サブディレクトリを再帰検索する方法
        For Each strDirPath As String In System.IO.Directory.GetDirectories(strRoot)
            Dim strFileLists As String() = SearchSubFolder(strDirPath, strExp)

            ' ワイルドカードに合致したファイルを取得
            If strFileLists IsNot Nothing Then
                scPath.AddRange(strFileLists)
            End If
        Next

        ' 結果を配列に追加していく
        Dim strResults As String() = New String(scPath.Count - 1) {}
        scPath.CopyTo(strResults, 0)
        Return strResults

    End Function

C#
        /// <summary>
        /// サブフォルダを全て検索する方法
        /// (サブフォルダを再帰的に検索する)
        /// </summary>
        /// <param name="strRoot"></param>
        /// <param name="strExp"></param>
        /// <returns></returns>
        public static string[] SearchSubFolder(string strRoot, string strExp)
        {
            // 初期化
            System.Collections.Specialized.StringCollection scPath = (
                new System.Collections.Specialized.StringCollection()
            );

            // カレントディレクトリを検索
            foreach (string strFileName in System.IO.Directory.GetFiles(strRoot, strExp))
            {
                scPath.Add(strFileName);
            }

            // サブディレクトリを再帰検索する方法
            foreach (string strDirPath in System.IO.Directory.GetDirectories(strRoot))
            {
                string[] strFileLists = SearchSubFolder(strDirPath, strExp);

                // ワイルドカードに合致したファイルを取得
                if (strFileLists != null)
                {
                    scPath.AddRange(strFileLists);
                }
            }

            // 結果を配列に追加していく
            string[] strResults = new string[scPath.Count];
            scPath.CopyTo(strResults, 0);
            return strResults;

        }

■■■