プロが教える店舗&オフィスのセキュリティ対策術

VB6のFileSystemObjectを使って、サブフォルダの中のファイルを取得したいのです。

For Each ~ Next 文などをつかっていろいろやっているのですが、どうしてもサブフォルダ以降のサブサブフォルダから下が取得できません。
誰か教えてください。

A 回答 (2件)

ちょっと前にやったことがあるので参考になれば・・・。



Private Sub GetFileCollection(ByRef sDirName As String, ByRef sFileCol As Collection)
  Dim FSysObj As Scripting.FileSystemObject
  Dim aFolder As Scripting.Folder
  Dim ChildFolder As Scripting.Folder
  Dim aFile As Scripting.File
  Dim i As Long

  On Error GoTo EXCEPTION_SECTION

  Set FSysObj = New Scripting.FileSystemObject
  Set aFolder = FSysObj.GetFolder(sDirName)
  If (aFolder.Attributes And System) = System Then
    Exit Sub
  End If

  For Each aFile In aFolder.Files
    sFileCol.Add aFile.Path
  Next aFile

  If aFolder.SubFolders.Count > 0 Then
    For Each ChildFolder In aFolder.SubFolders
      Call GetFileCollection(ChildFolder.Path, sFileCol)
    Next ChildFolder
  End If

  Exit Sub

EXCEPTION_SECTION:
  MsgBox "[" & Err.Number & "]" & Err.Description, vbExclamation + vbOKOnly, "エラー"
  Exit Sub

End Sub
    • good
    • 1

http://www.okweb.ne.jp/kotaeru.php3?q=38626
の回答を参考にしてやって下さい。

「再帰」っていうのを使えば、結構簡単に取得できます。
先のアルゴリズムを簡略化して書くと、
1:引数で指定されたフォルダに含まれるファイルの一覧を取得する。
2引数で指定されたフォルダに含まれるフォルダの一覧を検索する。
3:見つかったフォルダを引数にして自分自身を呼び出す。

のようになっています。「なぜこれでうまく行くのか」はちょっと説明しづらいですが、とにかくこれでうまく動くはずです。(動かなかったら補足してください。)

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=38626
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!