转—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
posted on 2010-12-23 13:06 nieyangjie 阅读(785) 评论(0) 编辑 收藏 举报