Welcome

首页 / 软件开发 / VB / VB实现含子目录的搜寻档案

VB实现含子目录的搜寻档案2010-01-15一般来说,搜寻目录及子目录底下符合条件之所有档案功能的程式撰写,一向颇令人头疼,而最後的解决方式多用 Recursive(程式递回呼叫) 来解决,像 VB5.0所附的 WinSeek.vbp 范例,就是 FileListBox 和 Recursive 程序的兼用,来解决这个问题。

本范例则用另一种思考模式切入,在不使用任何 OCX 及 Recursive 程序下利用两个非固定阵列变数及双层 Do...Loop 回圈解决这问题。本范例代表的含意是你把这段 Code 搬到无使用者可视界面的 Module 及 Class 里,一样可以执行(程式里的ListBox 及 MsgBox 只是为了解说方便而已,实际的资料已放入 FilePackage 这个动态阵列里,可以 Index 取用。)

当然你不能拿 Windows95 提供的[寻找]功能的搜寻速度来要求本范例,因为那根本是两种不同的驱动方式,但我用 "c:" 为搜寻启始目录,以 "*.*" 为条件来与 VB5.0 的范例程式 WinSeek.vbp 相比,WinSeek.vbp 是 2 分钟,我是 2.5 分钟。更值得一提的是,其实整个搜寻动作在 55 秒时已全部完成,剩下的时间都是用来显示 ListBox 资料。所以如果你的程式并不需要立即的显示查询结果,那麽本范例将比 WinSeek.vbp 更适合你使用。

最後如果你觉得本程式有任何错误或有改进的意见,请写信给站长,站长会转信给我,在此先谢谢你了。

Need a ListBox, CommandBox

Option Explicit

宣告搜寻到的档案的储存阵列变数

Private FilePackage() As String

Private Sub Command1_Click()

宣告存放目录名称储存阵列变数

Dim DirPackage() As String

存放档案搜寻条件之字串

Dim SearchString As String

接收 Dir() 传回字串,并做为回圈判断的字串

Dim DirString As String

I 目前搜寻目录的指位器,J 是 DirPackage 目录阵列之上限指标

K 是 FilePackage 之档案阵列之上限指标

Dim I As Long, J As Long, K As Long

把 ListBox 的旧显示资料清掉

List1.Clear

把 FilePackage 的上一次搜寻资料清掉

Erase FilePackage