邪恶八进制信息安全团队技术讨论组's Archiver

金州 2005-12-19 02:12

[转载]2种磁盘遍历算法(VB)

文章作者:牛博威

2种磁盘遍历算法(VB)

作者:牛博威
[url]http://nboy.cnwlt.com[/url]
Email:advice107@sina.com

磁盘遍历是经常用到的算法之一。磁盘遍历,根本是递归算法,只要懂得获取子目录和目录文件的方法,相信大家都可以编写出此算法。下面我介绍2种算法。

一种是利用VB提供的文件操作控件。主要是:DriveListBox 控件 ,DirListBox 控件 ,FileListBox 控件 。这三种控件的结合可以很方便地查询到某个目录的子目录和此目录下的文件。然后递归处理其子目录便可以得到该目录下所有的文件。

这三种控件的联系很简单,如下:

Private Sub Dir1_Change()     ;  Dir1为DirListBox

File1.path = Dir1.path

End Sub

Private Sub Drive1_Change()    ;Drive1为DriveListBox

Dir1.path = Drive1.Drive

End Sub

具体的遍历算法如下:

File1.Path = Dir1.Path       ‘设定文件列表控件与目录列表控件联系

For t& = 0 To Dir1.ListCount – 1  ‘获取目录列表中所有目录

  List1.AddItem Dir1.List(t&)    ‘把所有的子目录添加到一个列表控件,便于下面采用

Next

If t& = 0 Then GoTo finishedpoint ‘如果目录列表空,则遍历结束

  cnt& = 0  ‘设定文件列表的开头

startpoint:

  Dir1.Path = List1.List(cnt&)   ‘令目录列表指向其子目录,也就是上面保存到列表控件的内容

  File1.Path = Dir1.Path          ‘FileListBox控件指向DirListBox控件

  For t& = 0 To Dir1.ListCount - 1

     List1.AddItem Dir1.List(t&)    ‘同上

  Next

  For t& = 0 To File1.ListCount – 1   

          Print  List1.List(t&)        ‘获得当前子目录中的所有文件

另外一种方法是利用文件系统对象FSO。相信FSO是很多人进行文件处理的首选。利用FSO可以很方便的实现对磁盘的遍历。FSO的使用方法我就不在这里献丑了,如果您一时想不起来,可以翻一下资料。

     具体算法如下:

     Private Sub showfolderlist(parent As String)      ‘参数是指定的某目录,获取所有子目录。如果遍历磁盘,便指定参数是分区,如C:

Dim fsxo  As New FileSystemObject          ‘定义FSO对象

Dim flo   As Folder                   ‘定义Folder对象

  Set flo = fsxo.GetFolder(parent)        

  Set fs = flo.SubFolders              ‘获取子目录集

showfillist (parent)              ‘处理本目录下的所有文件,这一点在微软的资料中好象没有提到,但是如果没有的话将无法遍历到

                          ‘Parent目录下的文件

  For Each s In fs

     showfillist (s.Path)           

     showfolderlist (s.Path)         ‘递归处理下一级目录

  Next

End Sub

Private Sub showfillist(sparent As String)        '获取指定目录下所有文件

Dim sfsxo  As New FileSystemObject      ‘定义文件系统对象

Dim sflo   As Folder

Dim sfil   As Files                ‘文件对象

  Set sflo = sfsxo.GetFolder(sparent)      

  Set sfil = sflo.Files                ‘获取该目录下的文件集

  For Each f In sfil

     filpath = Trim(f.Path)          ‘filpath就是查到的文件路径

  Next

End Sub
我写的不好,请大家指教!

页: [1]
© 1999-2008 EvilOctal Security Team