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

本文介绍了一种使用自定义文件类在指定目录列表中查找文件的方法,并提供了详细的代码示例。

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

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

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

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值