转—VB.Net递归文件搜索实例
VB.Net递归文件搜索实例
代码如下:
Option Strict On
Option Explicit On
Imports System.IO
Public Class FileSearch
Private Const DefaultFileMask As String = "*.*"
Private Const DefaultDirectoryMask As String = "*"
#Region " Member Variables "
Private _InitialDirectory As DirectoryInfo
Private _DirectoryMask As String
Private _FileMask As String
'
Private _Directories As New ArrayList
Private _Files As New ArrayList
#End Region
#Region " Properites "
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
#End Region
#Region " Constructors "
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
#End Region
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
调用方法
代码如下:
Dim x As New FileSearch(New IO.DirectoryInfo("d:\Media\"), "*.nfo")
x.Search()
MessageBox.Show(x.Files.Count) ' number of files that match "*.nfo" in D:\Media
MessageBox.Show(x.Directories.Count) ' the total number of directories looked through