I am sure you all have your functions for a recursive directory/file listing, or file searching by wildcard \
function for .net, but here is another one, works great. I use it to get a list of all *.aspx pages in \
a project like this.

                Dim baseDirectory As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(“c:\projects\SSO\”)
                Dim x As New DSF.SSO.Other.FileSearch(baseDirectory, "*.aspx")
                Dim pageName As String = ""
                x.Search(, "*.aspx")
                lblMessage.Text = ""
                For Each f As System.IO.FileInfo In x.Files
                    pageName = f.FullName.Substring(baseDirectory.ToString.Length - 1, (f.FullName.Length - baseDirectory.ToString.Length) + 1)
                    pageName = pageName.Replace("\", "/")
                    DSF.SSO.Page.DAL.InsertPage(Val(txtPageGenAppID.Text), pageName.ToLower, pageName.Substring(100, pageName.Length - 4), pageName, 1, 1, 1)
                    lblMessage.Text += pageName + Chr(13)
                Next

The recusion class here
http://www.vbforums.com/showthread.php?t=341919

Or here:
<codebox vbscript>
<%
Public Class FileSearch
Private Const DefaultFileMask As String = "*.*"
Private Const DefaultDirectoryMask As String = "*"
Private _InitialDirectory As DirectoryInfo
Private _DirectoryMask As String
Private _FileMask As String
Private _Directories As New ArrayList
Private _Files As New ArrayList

Public Property InitialDirectory() As DirectoryInfo
Get
Return _InitialDirectory
End Get
Set(ByVal Value As DirectoryInfo)
_InitialDirectory = Value
End Set
End Property
Public Property DirectoryMask() As String
Get
Return _DirectoryMask
End Get
Set(ByVal Value As String)
_DirectoryMask = Value
End Set
End Property
Public Property FileMask() As String
Get
Return _FileMask
End Get
Set(ByVal Value As String)
_FileMask = Value
End Set
End Property

Public ReadOnly Property Directories() As ArrayList
Get
Return _Directories
End Get
End Property
Public ReadOnly Property Files() As ArrayList
Get
Return _Files
End Get
End Property

Public Sub New()
End Sub

Public Sub New(
ByVal BaseDirectory As String,
Optional ByVal FileMask As String = DefaultFileMask,
Optional ByVal DirectoryMask As String = DefaultDirectoryMask)

Me.New(New IO.DirectoryInfo(BaseDirectory), FileMask, DirectoryMask)

End Sub

Public Sub New(
ByVal BaseDirectory As DirectoryInfo,
Optional ByVal FileMask As String = DefaultFileMask,
Optional ByVal DirectoryMask As String = DefaultDirectoryMask)

_InitialDirectory = BaseDirectory
_FileMask = FileMask
_DirectoryMask = DirectoryMask

End Sub

Protected Overrides Sub Finalize()
_Files = Nothing
_Directories = Nothing
MyBase.Finalize()
End Sub

Public Sub Search(
Optional ByVal BaseDirectory As DirectoryInfo = Nothing,
Optional ByVal FileMask As String = Nothing,
Optional ByVal DirectoryMask As String = Nothing)

If Not IsNothing(BaseDirectory) Then
_InitialDirectory = BaseDirectory
End If

If IsNothing(_InitialDirectory) Then
Throw New ArgumentException("A Directory Must be specified!", "Directory")
End If

If IsNothing(FileMask) Then
_FileMask = DefaultFileMask
Else
_FileMask = FileMask
End If

If IsNothing(DirectoryMask) Then
_DirectoryMask = DefaultDirectoryMask
Else
_DirectoryMask = DirectoryMask
End If

DoSearch(_InitialDirectory)
End Sub

Private Sub DoSearch(ByVal BaseDirectory As DirectoryInfo)
Try
_Files.AddRange(BaseDirectory.GetFiles(_FileMask))
Catch u As UnauthorizedAccessException
'Siliently Ignore this error, there isnt any simple
'way to avoid this error.
End Try

Try
Dim Directories() As DirectoryInfo = BaseDirectory.GetDirectories(_DirectoryMask)
_Directories.AddRange(Directories)
For Each di As DirectoryInfo In Directories
DoSearch(di)
Next
Catch u As UnauthorizedAccessException
'Siliently Ignore this error, there isnt any simple
'way to avoid this error.
End Try
End Sub
End Class
</codebox>