Search for files in folders?

  • Thread starter Joris De Groote
  • Start date
J

Joris De Groote

Hi,

I have a program that must look in in certain folder and take out every file
(also the files in subfolders). Now it's no problem to do this with a few
for's and if's. However, I don't know how many subfolders there will be, it
can be 1, it can be 3, but it could be 15 to. I don't want to write all
these if's and for's in each other and than still be limited with the
predefined number of folders that are coded in the for/if structure. So can
someone help me out here without having me to write that very long
structure?

Thanks
Joris


----example of code how I can write it----
'Inlezen aantal Sitemappen

dir1 = System.IO.Directory.GetDirectories(bronmap)

Dim i As Integer

If dir1.GetLength(0) > 0 Then

'Mappen gevonden in ZipBronMap

For i = 0 To (dir1.GetLength(0) - 1)

'Mappen in dir1

'Inlezen mappen

dir2 = System.IO.Directory.GetDirectories(dir1(i) + "\")

If dir2.GetLength(0) > 0 Then

.......... (more code here but can't copy all, it's like always the same...)

End If

Next

'Geen mappen gevonden in ZipBronMap (dir1 leeg)

'Kijken naar PDF Bestanden & Verwerken

files = System.IO.Directory.GetFiles(bronmap)

If files.GetLength(0) > 0 Then

Bestand_Controle(files)

End If

Else

'Geen mappen gevonden in ZipBronMap (dir1 leeg)

'Kijken naar PDF Bestanden & Verwerken

files = System.IO.Directory.GetFiles(bronmap)

If files.GetLength(0) > 0 Then

Bestand_Controle(files)

End If

End If
 
R

Robinson

Joris De Groote said:
Hi,

I have a program that must look in in certain folder and take out every
file (also the files in subfolders). Now it's no problem to do this with a
few for's and if's. However, I don't know how many subfolders there will
be, it can be 1, it can be 3, but it could be 15 to. I don't want to write
all these if's and for's in each other and than still be limited with the
predefined number of folders that are coded in the for/if structure. So
can someone help me out here without having me to write that very long
structure?

You want to use Recursion, so that given a single high level folder
(Ancestor), the algorithm will iterate all lower level sub-folders
(Descendants). Here's what it might look like:

Public Sub Iterate(ByVal theRoot As String)
Iterate_Aux(theRoot)
End Sub

Public Sub Iterate_Aux(ByVal theRoot As String)

' Process the files in this directory

Dim theFiles() As String = Directory.GetFiles(theRoot)

For Each theFile As String In theFiles

' ... process the file in whatever way you want....

Next



' Recurse to sub-directorys to process those files too...

Dim theDirectories() As String = Directory.GetDirectories(theRoot)

For Each theDirectory As String In theDirectories

' Recurse down a level on this branch...

Iterate_Aux(theDirectory)

Next

End Sub
 
Z

zacks

Imports System.IO

Public Class EnumDir

Private _Root As String
Private _Files As List(Of String)
Private _Folders As List(Of String)
Private _TotalSize As Long
Private _TotalFiles As Long
Private _TotalFolders As Long

Public Property Root() As String
Get
Return _Root
End Get
Set(ByVal value As String)
_Root = value
End Set
End Property

Public Property Files() As List(Of String)
Get
Return _Files
End Get
Set(ByVal value As List(Of String))
_Files = value
End Set
End Property

Public Property Folders() As List(Of String)
Get
Return _Folders
End Get
Set(ByVal value As List(Of String))
_Folders = value
End Set
End Property

Public Property TotalSize() As Long
Get
Return _TotalSize
End Get
Set(ByVal value As Long)
_TotalSize = value
End Set
End Property

Public Property TotalFiles() As Long
Get
Return _TotalFiles
End Get
Set(ByVal value As Long)
_TotalFiles = value
End Set
End Property

Public Property TotalFolders() As Long
Get
Return _TotalFolders
End Get
Set(ByVal value As Long)
_TotalFolders = value
End Set
End Property

Public Sub New()

_Root = ""
_Files = New List(Of String)
_Folders = New List(Of String)
_TotalSize = 0
_TotalFiles = 0
_TotalFolders = 0

End Sub

''' <summary>
''' Enumerates all Files in a Folder Tree
''' </summary>
''' <param name="Root"></param>
''' <remarks>Root Directory to Enumerate</remarks>
Public Sub New(ByVal Root As String)

_Root = Root
_Files = New List(Of String)
_Folders = New List(Of String)
_TotalSize = 0
_TotalFiles = 0
_TotalFolders = 0
Me.GetFiles(_Root)

End Sub

Public Sub GetFiles(ByVal Path As String)

Dim myDirectoryRoot As New DirectoryInfo(Path)
Dim di As DirectoryInfo
Dim fi As FileInfo
Dim lSize As Long = 0

For Each fi In myDirectoryRoot.GetFiles
_Files.Add(fi.FullName)
_TotalFiles += 1
_TotalSize += fi.Length
Next
For Each di In myDirectoryRoot.GetDirectories()
_Folders.Add(di.FullName)
_TotalFolders += 1
GetFiles(di.FullName)
Next
myDirectoryRoot = Nothing

End Sub

End Class
 
H

Herfried K. Wagner [MVP]

Joris De Groote said:
I have a program that must look in in certain folder and take out every
file (also the files in subfolders). Now it's no problem to do this with a
few for's and if's. However, I don't know how many subfolders there will
be, it can be 1, it can be 3, but it could be 15 to. I don't want to write
all these if's and for's in each other and than still be limited with the
predefined number of folders that are coded in the for/if structure. So
can someone help me out here without having me to write that very long
structure?

If you are looking for a complete multithreaded solution, check out the
following sample:

<URL:http://dotnet.mvps.org/dotnet/samples/filesystem/FileSystemEnumerator.zip>
 
J

Joris De Groote

I'm going to reply like this, so I can have every one in one post :).
Thanks for the help!

Joris
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top