Fog Creek Software
Discussion Board

VB: How do I recursively display all files

Not sure what the VB objects are.  Just want to write a routine that will recusively display all files on the local hard drive.

Thursday, May 20, 2004

Come on - do some research before you post !!!

This is a pretty basic problem and there is sample code everywhere if you looked.

Thursday, May 20, 2004

VB has built-in commands to do this, but it's much easier to use the FileSystemObjects.  There, that'll give you something to Google on.  (=

Sam Livingston-Gray
Thursday, May 20, 2004

Give the guy a break.
"vb recursive files" only comes up with 16k+ files ... hard to find anything meaningful in that small a return.
"vb dir files" comes up with almost 64k hits but you'd have to have looked in the help file and found the Dir command to know to use it.

Thursday, May 20, 2004



Thursday, May 20, 2004

In life there are people who manage to tie their own shoe laces by the time they're 5 or so, and there are people who need to ask everyone else where their shoe laces are and why they won't fit in their pumps.

Simon Lucy
Friday, May 21, 2004

Geezz...lets just write it line as air code!!

As always..the answer lies in “how” you want to display the results.

As others have commented…using the file system object is usually preferred.

The other problem is that the VB dir() does not hold its state…you have to exhaust it each time. The other problem is that dir() can return file names without atrribles..and it thinks it is directory (that gives a exection error). So, for quick and dirty...on error just exits...

This code snip sends the results to collection. What you do with that collection after is up to you. This test snip sends the results to the debug window. You can run the following code in Excel, Word..or even fire up VB if you want….

Sub dirTest()

  Dim dlist        As New Collection
  Dim startDir    As String
  Dim i              As Integer

  startDir = "C:\Program files\"
  Call FillDir(startDir, dlist)

  MsgBox "there are " & dlist.Count & " in the dir"

  ' lets printout the stuff into debug window for a test

  For i = 1 To dlist.Count
      Debug.Print dlist(i)
  Next i

End Sub

Sub FillDir(startDir As String, dlist As Collection)

  ' build up a list of files, and then
  ' add add to this list, any additinal
  ' folders

  Dim strTemp              As String
  Dim colFolders          As New Collection
  Dim vFolderName      As Variant

  On Error GoTo bailout
  strTemp = Dir(startDir)

  Do While strTemp <> ""
      dlist.Add startDir & strTemp
      strTemp = Dir

  ' now build a list of additional folders
  strTemp = Dir(startDir & "*.", vbDirectory)

  Do While strTemp <> ""
      If (strTemp <> ".") And (strTemp <> "..") Then
        colFolders.Add strTemp
      End If
      strTemp = Dir

  ' now process each folder (recursion)
  For Each vFolderName In colFolders
      Call FillDir(startDir & vFolderName & "\", dlist)
  Next vFolderName
End Sub

Albert D. Kallal
Edmonton, Alberta Canada

Albert D. Kallal
Friday, May 21, 2004

Simon, you magnificent bastard, your post was a bastardly way. :-P

Bobby Frost
Saturday, May 22, 2004

You can accomplish the same thing in a lot less code by referencing the Microsoft Scripting Runtime and using the FileSystemObject:

Dim fso As New Scripting.FileSystemObject

Private Sub Form_Load()
    Call showfiles(fso.GetFolder("C:\"))
End Sub

Sub showfiles(ByRef ThisFolder As Folder)
    Dim ThisFile As File
    ' List files in this folder
    For Each ThisFile In ThisFolder.Files
        Debug.Print ThisFile.Path & "\" & ThisFile.Name

    ' Loop through subdirectories
    For Each ThisFolder In ThisFolder.SubFolders
        Call showfiles(ThisFolder)
End Sub

Paul S
Saturday, May 22, 2004

"I can code a solution to that problem in 30 lines."

"I can code a solution to that problem in 20 lines."

"I can code a solution to that problem in 15 lines."

"Code that solution."

Sunday, May 23, 2004

*  Recent Topics

*  Fog Creek Home