掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB6で指定フォルダ以下にあるファイル名を列挙するには? (ID:102124)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> Dir 関数の場合、入れ子で呼び出す機能が無いので、階層を辿る場合には >> 少々工夫が必要になりますね(と言いつつ、私も Dir を使う事が多いですが)。 > これが良く理解できなかったので、もっとスマートな方法がないかと思いました。 Dir/Dir$ 関数バージョンです。 列挙中に、別のディレクトリを走査する事は出来ませんので、 列挙後に、別のディレクトリを走査するようにしています。 ----- Option Explicit Private Sub Form_Load() Text1.Text = "C:\Program Files\Microsoft Visual Studio\VB98" Command1.Caption = "列挙" End Sub Private Sub Command1_Click() Dim Files() As String Files = GetFiles(Text1.Text, True) '確認用 Dim v As Variant For Each v In Files Debug.Print v Next End Sub Public Function GetFiles(ByVal directory As String, Optional includeDirName As Boolean = False) As String() directory = directory & IIf(directory Like "*\", "", "\") '下位要素を列挙する Dim directories As Collection, Files As Collection Set directories = New Collection Set Files = New Collection Dim dirName As String dirName = Dir$(directory, vbDirectory Or vbSystem Or vbHidden Or vbReadOnly) Do Until dirName = "" If dirName <> "." And dirName <> ".." Then If (GetAttr(directory & dirName) And vbDirectory) = vbDirectory Then directories.Add directory & dirName Else Files.Add directory & dirName End If End If dirName = Dir$() Loop Dim result As Object Set result = CreateObject("Scripting.Dictionary") If includeDirName Then 'ディレクトリ名も出力 result.Add result.Count, directory & IIf(directory Like "*\", "", "\") End If 'このディレクトリのファイルを出力 Dim filePath As Variant For Each filePath In Files result.Add result.Count, filePath Next '列挙した下位ディレクトリに対して再帰 Dim dirPath As Variant For Each dirPath In directories For Each filePath In GetFiles(dirPath, includeDirName) result.Add result.Count, filePath Next Next 'Variant 配列から String配列に変換 GetFiles = Split(Join(result.Items(), vbNullChar), vbNullChar) End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.