一个用得着的查找文件(及目录)的方法

来源:互联网 发布:apache windows下载 编辑:程序博客网 时间:2024/05/16 19:39

以下代码示例了如何在一个指定的目录(包含目录列表)中查找需要的文件.

首先,我们需要建立一个自己的文件类,用于文件和目录

Public Class myFileInfo
    '@自定义的myFileInfo类,用于保存文件(包含目录)的信息
    Public FullFileName As String '满文件名( 包含路径)
    Public FileAttribute As System.IO.FileAttributes  '文件的属性
End Class

这个很简单的类也可以用结构代替

    '@文件查找功能:查找指定目录列表中的文件名,结果返回包含此文件名的对象
    '@输入:lstDirName,包含指定目录的字符串数组列表 ,FileName,指定要查找的文件名
    '@输出ArrayList对象,内含自定义的FileInfo对象
    '示例:Dim tmpSyn As New SyncDirectory(Label1)
    '@    Dim tmpStr(2) As String
    '@    tmpStr(0) = "F:/2006天"
    '@    tmpStr(1) = "F:/2005夏"
    '@    Dim tmpArray As ArrayList = tmpSyn.FindFileInDirectory(tmpStr, "图片")
    Public Overridable Function FindFileInDirectory(ByVal lstDirName As String(), ByVal FileName As String) As ArrayList

        Dim dirArray As New ArrayList '要返回的内容
        Dim subArray As ArrayList '来自子级的内容
        Try
          
            Dim i As Integer

            For Each tmpStrDir As String In lstDirName

                subArray = FindFileInDirectory(tmpStrDir, FileName)
                For i = 0 To subArray.Count - 1
                    '将子级的加入到当前级
                    dirArray.Add(subArray(i))
                Next
            Next

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        Return dirArray
    End Function

    '@文件查找功能:查找指定目录列表中的文件名,结果返回包含此文件名的对象
    '@输入:DirName,包含指定目录的字符串 ,FileName,指定要查找的文件名
    '@输出ArrayList对象,内含自定义的FileInfo对象
    '@示例:Dim tmpArray As ArrayList = tmpSyn.FindFileInDirectory("F:/2005夏", "图片")
    Public Overridable Function FindFileInDirectory(ByVal DirName As String, ByVal FileName As String) As ArrayList
        Dim dirArray As New ArrayList '要返回的内容
        Dim subArray As ArrayList '来自子级的内容
        Try

            Dim i As Integer

            Dim tmpD As New DirectoryInfo(DirName)
            Dim tmpFiles As FileInfo() = tmpD.GetFiles() ''取源文件夹,返回的是Fileinfo() 
            For Each tmpFile As FileInfo In tmpFiles
                ''循环查询所有的文件
                If tmpFile.Name.IndexOf(FileName) >= 0 Then
                    '如果找到包含的,则加入到Arraylist中
                    Dim tmpFileInfo As New myFileInfo
                    With tmpFileinfo
                        .FullFileName = tmpFile.FullName
                        .FileAttribute = tmpFile.Attributes
                    End With
                    dirArray.Add(tmpFileInfo)
                End If
            Next

            Dim tmpDirs As DirectoryInfo() = tmpD.GetDirectories()
            For Each tmpDir As DirectoryInfo In tmpDirs
                subArray = FindFileInDirectory(tmpDir.FullName, FileName) '递归处理所有的目录
                If tmpDir.Name.IndexOf(FileName) >= 0 Then
                    '如果目录名也包含FileName,则也加入到arraylist中
                    Dim tmpFileInfo As New myFileInfo
                    With tmpFileinfo
                        .FullFileName = tmpDir.FullName
                        .FileAttribute = tmpDir.Attributes
                    End With
                    dirArray.Add(tmpFileInfo)
                End If
                For i = 0 To subArray.Count - 1
                    '将子级的加入到当前级
                    dirArray.Add(subArray(i))
                Next
            Next

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        Return dirArray
    End Function

两个方法的注释都已经很详细了,不多说,自己看代码

如果有更好的方法可以给我讲讲.让我能不断进步

原创粉丝点击