注册 登录
编程论坛 VB6论坛

请教怎么搜寻目录?

ictest 发布于 2017-01-19 15:00, 862 次点击
我想达到这样的目的:
指定目录,点击按钮,这个目录下所有大于6个字符的目录名分别显示在label1——label10中,并在label11中显示个数。

例如 c:\aabbcc\1234\ 目录下有如下目录:aabbcc1、baabbcc2、baabbcc3、baabbcc4、baabbcc5、baabbcc6、baabbcc7、baabbcc8。
    指定c:\aabbcc\1234\ 后,点击按钮,label1——label8中分别显示aabbcc1——baabbcc8,最后两个(label9、label10)中显示为空,label11中显示8.

请教这个程序怎么写,求解。
3 回复
#2
ZHRXJR2017-01-19 19:43
程序代码:

    Dir1.Path = "c:\aabbcc\1234\"   ' Dir1 是 DirListBox 控件,在界面可以设置 Dir1.Visible = False
    Dim TT() As String, KK As Integer, SS As Integer, MM As String, XX As Integer
    SS = Dir1.ListCount
    ReDim TT(0 To SS)
    For I = 0 To SS - 1
    TT(I) = Dir1.List(I)
    Next I
    For I = 0 To SS - 1
    KK = Len(TT(I))
    MM = Right(TT(I), KK - 15)   '15是 "c:\aabbcc\1234\" 字符串的长度,也可以用  Len("c:\aabbcc\1234\") 代替
    If Len(MM) > 6 Then
    XX = XX + 1
    Label1(XX).Caption = MM      'Label1(XX) 最好动态放置,这里不需要再给你代码了吧
    End If
    Next I
    Label2.Caption = XX   '这里显示检测出“所有大于6个字符的目录”的个数

我在测试 "C:\Windows\" 目录没有问题可以检测出66个目录。

[此贴子已经被作者于2017-1-20 08:22编辑过]

#3
ictest2017-01-20 16:04
谢谢版主的帮助。
我想了一下,我提出的问题有瑕疵,未能想周全。应该考虑到再下一层或几层子目录的问题。这就涉及了历遍所有子目录的问题。经过再查找资料,重写程序如下:
Public Sub HaalDirOp(ByVal Path$)
Dim vDirName As String, LastDir As String, i As Integer
i = -1
Screen.MousePointer = vbHourglass
If Right(Path$, 1) <> "\" Then Path$ = Path$ & "\"
vDirName = Dir(Path, vbDirectory) ' Retrieve the first entry.
Do While Not vDirName = ""
If vDirName <> "." And vDirName <> ".." Then
If (GetAttr(Path & vDirName) And vbDirectory) = vbDirectory Then
LastDir = vDirName
'MsgBox vDirName
List1.AddItem Path$ & vDirName
If Len(vDirName) > 6 Then
i = i + 1
Label1(i).Caption = vDirName
End If
Call HaalDirOp(Path$ & vDirName)
vDirName = Dir(Path$, vbDirectory)
Do Until vDirName = LastDir Or vDirName = ""
vDirName = Dir
Loop
If vDirName = "" Then Exit Do
End If
End If
vDirName = Dir
Loop
Screen.MousePointer = vbNormal
End Sub

Private Sub Command1_Click()
HaalDirOp "c:\aabbcc\1234\"
End Sub

这段程序解决了历遍N层子目录,挑选出满足条件的目录名在label中显示。完全达到我的要求。

在这里再次感谢版主的帮助!
#4
ictest2017-01-23 13:52
继续请教版主大人:
上面的程序在运行后,现在发现了一个问题:
假设目录结构如下:
E:---111---11---111111111
         |    |-222222222
         |    |-333333333
         |-22---444444444
         |-33---555555555
初始目录设定为E:\111\,逐语句运行后发现:在label1中显示111111111、label2中显示222222222、label3中显示333333333后,照理想方式是444444444出现在label4中,555555555出现在label5中,但实际情况是444444444又出现在label1中,将111111111给覆盖掉,然后555555555出现在label1中将444444444覆盖掉。

简单地说,目前显示的情况是:
label1:555555555
label2:222222222
label3:333333333
label4:空
label5:空

请教如何显示成这样:
label1:111111111
label2:222222222
label3:333333333
label4:444444444
label5:555555555
1