| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 853 人关注过本帖
标题:请教怎样搜寻目录——续帖
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:3 
请教怎样搜寻目录——续帖
我想达到这样的目的:
指定目录,点击按钮,这个目录下所有大于6个字符的目录名分别显示在label1——label10中,并在label11中显示个数。
假设目录结构如下:
E:---111---11---111111111
         |    |-222222222
         |    |-333333333
         |-22---444444444
         |-33---555555555
解释:e盘111目录下有11,22,33目录,11目录下有111111111,222222222,333333333子目录,22目录下有444444444子目录,33 目录下有555555555子目录。
    指定e:\111\路径后,点击按钮,label1——label5中分别显示111111111——555555555,最后五个(label6~label10)中显示为空,label11中显示5。
我编写的程序如下:
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 "e:\111\"
End Sub

现发现运行结果有问题。逐语句运行后发现:在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

另外label11的目录个数语句怎么写?

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

2017-01-24 01:07
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:10 
Dim i As Integer
i = -1
rem 变量i的生命移到过程外边,否则循环的过程中i又被赋初值了。
Public Sub HaalDirOp(ByVal Path$)
2017-01-24 13:08
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:10 
完成该功能一个递归解决,代码如下(窗口里必须放11个label,并且名称依次为Label1--Label11):
程序代码:
Private Sub HaalDirOp(sdir As String)
  Dim a As String, i As Integer, j As Integer, c As Integer, obj As Control
  '本递归只遍历搜索目录名,不针对文件名
  If Right(sdir, 1) <> "\" Then sdir = sdir & "\"
  a = Dir(sdir, vbDirectory)
  While a <> ""
    If Len(a) < 6 Then
      c = c + 1
      If a <> "." And a <> ".." Then
        HaalDirOp sdir & a & "\"
        i = 1
        a = Dir(sdir, vbDirectory)
        While i < c
          Dir
          i = i + 1
        Wend
      End If
    Else
      i = Val(Label11) + 1
      For Each obj In Form1.Controls    '遍历窗口里label控件,把长度为6位的目录名称写入该控件显示出来
        If TypeName(obj) = "Label" And obj.Name = "Label" & i Then
          obj = a
          Exit For
        End If
      Next
      Label11 = i
    End If
    a = Dir
  Wend
End Sub

Private Sub Command1_Click()
  Label11 = 0
  HaalDirOp "e:\111\"
End Sub
2017-01-24 15:32
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
嗯嗯,谢谢两位高手前辈了!zbjzbj前辈明确指出了我的问题并提供了修改方法,xzlxzlxzl版主的程序与我的程序更是殊途同归,让我感受到VB的强大。
再次谢谢两位啦!
2017-01-24 16:24
快速回复:请教怎样搜寻目录——续帖
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040376 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved