Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. Get all directories and subdirectories

Get all directories and subdirectories

Scheduled Pinned Locked Moved Visual Basic
tutorialquestion
13 Posts 4 Posters 3 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L ltt19

    Hi, Does anybody knows how to get all driections and subdirectoires of a hdd? I took a look at System.IO.IsolatedStorage, but I could not specify the hdd. If someone has any ideas.... Thanks

    C Offline
    C Offline
    Colin Angus Mackay
    wrote on last edited by
    #2

    Use the DirectoryInfo and FileInfo classes. --Colin Mackay--

    EuroCPian Spring 2004 Get Together[^] "You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar

    L 1 Reply Last reply
    0
    • C Colin Angus Mackay

      Use the DirectoryInfo and FileInfo classes. --Colin Mackay--

      EuroCPian Spring 2004 Get Together[^] "You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar

      L Offline
      L Offline
      ltt19
      wrote on last edited by
      #3

      Could you give me an example?? it will be very helpfull Thanks in advance

      C 1 Reply Last reply
      0
      • L ltt19

        Hi, Does anybody knows how to get all driections and subdirectoires of a hdd? I took a look at System.IO.IsolatedStorage, but I could not specify the hdd. If someone has any ideas.... Thanks

        D Offline
        D Offline
        Dr_X
        wrote on last edited by
        #4

        This code is for VB. VB.Net is quite similar though. Set a reference to Microsoft Scripting Runtime

        Dim srt As New Scripting.FileSystemObject
        Dim drv As Drive
        Dim fld As Folder
        Dim f As File

        Set drv = srt.Drives("C:\")
        Set fld = drv.RootFolder
        For Each f In fld.Files
        Debug.Print f.Name
        Next

        If you want to loop through each directory as well you will need to create another function to return the folder object. To check to see if a folder has sub folder use the following code: fld.SubFolders Michael

        L 1 Reply Last reply
        0
        • L ltt19

          Could you give me an example?? it will be very helpfull Thanks in advance

          C Offline
          C Offline
          Colin Angus Mackay
          wrote on last edited by
          #5

          All the information is available on MSDN. It is an excellent resource. Iterating over the subdirectories[^] Getting the files in a directory[^] FileInfo class[^] DirectoryInfo class[^] This should help. --Colin Mackay--

          EuroCPian Spring 2004 Get Together[^] "You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar

          L 1 Reply Last reply
          0
          • L ltt19

            Hi, Does anybody knows how to get all driections and subdirectoires of a hdd? I took a look at System.IO.IsolatedStorage, but I could not specify the hdd. If someone has any ideas.... Thanks

            J Offline
            J Offline
            Jim Taylor
            wrote on last edited by
            #6

            This is some code I have used. It writes all files in a directory and sub directories to an xml document. The functions are recusrsive. Modify to suite your needs as appropriate.

                       'Create a new xml textwriter and write to a stringwriter object
                        Dim sw As New StringWriter
                        Dim writer As New XmlTextWriter(sw)
                        'Write document element
                        writer.WriteStartElement("Files")
                        'Get the files here
                        ListFoldersAndFiles(Server.MapPath("MyFolder"), writer)
                        writer.WriteEndElement()
                        'Write end document element
                        'Clean up objects
                        writer.Flush()
                        writer.Close()
                        writer = Nothing
                        Dim xmldoc As New XmlDocument
                        xmldoc.LoadXml(sw.ToString())
            
            
            Private Sub ListFoldersAndFiles(ByVal pth As String, ByRef writer As XmlTextWriter)
                AddFiles(pth, writer)
                AddFolders(pth, writer)
            End Sub
            
            Public Sub AddFiles(ByVal pth As String, ByRef writer As XmlTextWriter)
                Dim sFiles() As String = Directory.GetFiles(pth)
                Dim iFiles As Integer
                For iFiles = 0 To UBound(sFiles)
                    writer.WriteStartElement("Files")
                    writer.WriteStartElement("Path")
                    writer.WriteString(pth)
                    writer.WriteEndElement()
                    writer.WriteStartElement("Filename")
                    writer.WriteString(Path.GetFileName(sFiles(iFiles)))
                    writer.WriteEndElement()
                    writer.WriteEndElement()
                Next
            End Sub
            
            Public Sub AddFolders(ByVal pth As String, ByRef writer As XmlTextWriter)
                Dim sDirectories() As String = Directory.GetDirectories(pth)
                Dim iDirectories As Integer
                Dim sDirectoryName As String
                For iDirectories = 0 To UBound(sDirectories)
                    AddFolders(sDirectories(iDirectories), writer)
                    AddFiles(sDirectories(iDirectories), writer)
                Next
            End Sub
            

            Jim

            L 1 Reply Last reply
            0
            • C Colin Angus Mackay

              All the information is available on MSDN. It is an excellent resource. Iterating over the subdirectories[^] Getting the files in a directory[^] FileInfo class[^] DirectoryInfo class[^] This should help. --Colin Mackay--

              EuroCPian Spring 2004 Get Together[^] "You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar

              L Offline
              L Offline
              ltt19
              wrote on last edited by
              #7

              Hi, I have already seen some these web pages, but by problem is to look at all subdirectories, I am going to make a kind of loop over each directory. I hope that it help me. Thanks, you helped me a lot too.

              C 1 Reply Last reply
              0
              • D Dr_X

                This code is for VB. VB.Net is quite similar though. Set a reference to Microsoft Scripting Runtime

                Dim srt As New Scripting.FileSystemObject
                Dim drv As Drive
                Dim fld As Folder
                Dim f As File

                Set drv = srt.Drives("C:\")
                Set fld = drv.RootFolder
                For Each f In fld.Files
                Debug.Print f.Name
                Next

                If you want to loop through each directory as well you will need to create another function to return the folder object. To check to see if a folder has sub folder use the following code: fld.SubFolders Michael

                L Offline
                L Offline
                ltt19
                wrote on last edited by
                #8

                There are some classes in System.IO that do the same that you are doing. The problem is to loop over all directories with this classes. I will try to do a loop with your code. Thanks again!!!

                D 1 Reply Last reply
                0
                • J Jim Taylor

                  This is some code I have used. It writes all files in a directory and sub directories to an xml document. The functions are recusrsive. Modify to suite your needs as appropriate.

                             'Create a new xml textwriter and write to a stringwriter object
                              Dim sw As New StringWriter
                              Dim writer As New XmlTextWriter(sw)
                              'Write document element
                              writer.WriteStartElement("Files")
                              'Get the files here
                              ListFoldersAndFiles(Server.MapPath("MyFolder"), writer)
                              writer.WriteEndElement()
                              'Write end document element
                              'Clean up objects
                              writer.Flush()
                              writer.Close()
                              writer = Nothing
                              Dim xmldoc As New XmlDocument
                              xmldoc.LoadXml(sw.ToString())
                  
                  
                  Private Sub ListFoldersAndFiles(ByVal pth As String, ByRef writer As XmlTextWriter)
                      AddFiles(pth, writer)
                      AddFolders(pth, writer)
                  End Sub
                  
                  Public Sub AddFiles(ByVal pth As String, ByRef writer As XmlTextWriter)
                      Dim sFiles() As String = Directory.GetFiles(pth)
                      Dim iFiles As Integer
                      For iFiles = 0 To UBound(sFiles)
                          writer.WriteStartElement("Files")
                          writer.WriteStartElement("Path")
                          writer.WriteString(pth)
                          writer.WriteEndElement()
                          writer.WriteStartElement("Filename")
                          writer.WriteString(Path.GetFileName(sFiles(iFiles)))
                          writer.WriteEndElement()
                          writer.WriteEndElement()
                      Next
                  End Sub
                  
                  Public Sub AddFolders(ByVal pth As String, ByRef writer As XmlTextWriter)
                      Dim sDirectories() As String = Directory.GetDirectories(pth)
                      Dim iDirectories As Integer
                      Dim sDirectoryName As String
                      For iDirectories = 0 To UBound(sDirectories)
                          AddFolders(sDirectories(iDirectories), writer)
                          AddFiles(sDirectories(iDirectories), writer)
                      Next
                  End Sub
                  

                  Jim

                  L Offline
                  L Offline
                  ltt19
                  wrote on last edited by
                  #9

                  Hi, you are using XML, but the "idea" is the same, it could help me!!!, so I will try to do it with the System.IO classes, if not your code will be very usefull! Thanks!

                  1 Reply Last reply
                  0
                  • L ltt19

                    There are some classes in System.IO that do the same that you are doing. The problem is to loop over all directories with this classes. I will try to do a loop with your code. Thanks again!!!

                    D Offline
                    D Offline
                    Dr_X
                    wrote on last edited by
                    #10

                    Here is something I wrote a few years back in VB6 to simple create a text file of all of my MP3s. It doesn't filter them by *.MP3 since that is all that is in that particular shared drive but you get the idea. I haven't had to mess around with the system.io yet. But the below does work. Give it a try.

                    Dim fso As New FileSystemObject
                    Dim List As TextStream

                    Const C_PLUS As String = "+ "
                    Dim i As Integer ' Indent

                    Private Sub Main()
                    Dim d As Folder

                    Set d = fso.GetFolder("N:\")
                    Set List = fso.CreateTextFile(d.Path & "NewSongList.txt", True)

                    DoFolders d
                    List.Close

                    End Sub

                    Private Sub DoFolders(fldr As Folder)
                    Dim d As Folder
                    If i = 0 Then
                    List.WriteLine Space(i) & C_PLUS & fldr.Path
                    Else
                    List.WriteLine Space(i) & C_PLUS & fldr.Name
                    End If
                    i = i + 2
                    DoFiles fldr
                    For Each d In fldr.SubFolders
                    DoFolders d
                    Next
                    i = i - 2
                    End Sub

                    Private Sub DoFiles(fldr As Folder)
                    Dim f As File

                    For Each f In fldr.Files
                    List.WriteLine Space(i + 2) & f.Name
                    Next
                    End Sub

                    Michael

                    L 1 Reply Last reply
                    0
                    • D Dr_X

                      Here is something I wrote a few years back in VB6 to simple create a text file of all of my MP3s. It doesn't filter them by *.MP3 since that is all that is in that particular shared drive but you get the idea. I haven't had to mess around with the system.io yet. But the below does work. Give it a try.

                      Dim fso As New FileSystemObject
                      Dim List As TextStream

                      Const C_PLUS As String = "+ "
                      Dim i As Integer ' Indent

                      Private Sub Main()
                      Dim d As Folder

                      Set d = fso.GetFolder("N:\")
                      Set List = fso.CreateTextFile(d.Path & "NewSongList.txt", True)

                      DoFolders d
                      List.Close

                      End Sub

                      Private Sub DoFolders(fldr As Folder)
                      Dim d As Folder
                      If i = 0 Then
                      List.WriteLine Space(i) & C_PLUS & fldr.Path
                      Else
                      List.WriteLine Space(i) & C_PLUS & fldr.Name
                      End If
                      i = i + 2
                      DoFiles fldr
                      For Each d In fldr.SubFolders
                      DoFolders d
                      Next
                      i = i - 2
                      End Sub

                      Private Sub DoFiles(fldr As Folder)
                      Dim f As File

                      For Each f In fldr.Files
                      List.WriteLine Space(i + 2) & f.Name
                      Next
                      End Sub

                      Michael

                      L Offline
                      L Offline
                      ltt19
                      wrote on last edited by
                      #11

                      Hi, Yes, the idea is great, I am going to use your example, but I will try to use the system.io class, if I can´t, I will use your example as it is..... Thanks, it is what I was looking for....

                      1 Reply Last reply
                      0
                      • L ltt19

                        Hi, I have already seen some these web pages, but by problem is to look at all subdirectories, I am going to make a kind of loop over each directory. I hope that it help me. Thanks, you helped me a lot too.

                        C Offline
                        C Offline
                        Colin Angus Mackay
                        wrote on last edited by
                        #12

                        ltt19 wrote: but by problem is to look at all subdirectories, I am going to make a kind of loop over each directory That sounds about right. For each directory you then have to loop over the subdirectories, for each of the subdirectories you have to loop over the subdirectories, and so on... --Colin Mackay--

                        EuroCPian Spring 2004 Get Together[^] "You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar

                        1 Reply Last reply
                        0
                        • L ltt19

                          Hi, Does anybody knows how to get all driections and subdirectoires of a hdd? I took a look at System.IO.IsolatedStorage, but I could not specify the hdd. If someone has any ideas.... Thanks

                          L Offline
                          L Offline
                          ltt19
                          wrote on last edited by
                          #13

                          I did it, it works, for me, the code is above, if you want to make any changes... Thanks for everybody who helped me. Here is the code, using a ListBox named as 'lst' Dim folders As New System.Collections.Specialized.StringCollection Private Function GetAllDirectories(ByVal Name As String) On Error Resume Next Dim finder As System.IO.Directory Dim cdir As New System.Collections.Specialized.StringCollection Dim cdir2 As New System.Collections.Specialized.StringCollection Dim cancel As Boolean = False Dim dir As String cdir.AddRange(finder.GetDirectories(Name)) folders.AddRange(finder.GetDirectories(Name)) Do While cancel = False For Each dir In cdir folders.AddRange(finder.GetDirectories(dir)) cdir2.AddRange(finder.GetDirectories(dir)) Next If cdir2.Count = 0 Then cdir = Nothing cdir2 = Nothing Dim i As Integer For i = 0 To folders.Count lst.Items.Add(folders(i).ToString) Next cancel = True Exit Do Else cdir.Clear() Dim y As Integer For y = 0 To cdir2.Count cdir.Add(cdir2(y)) Next cdir2.Clear() dir = Nothing y = Nothing End If Loop MessageBox.Show(lst.Items.Count) End Function Private Function GetAllFiles() On error resume next Dim files As System.IO.Directory Dim dir As String For Each dir In folders lst.Items.AddRange(files.GetFiles(dir)) Next End Function

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • World
                          • Users
                          • Groups