为什么在递归返回的时候出错呢?

蘑菇 2003-05-12 09:29:14
源码如下:
Public Function finddir(dirname As String)
Dim dirname1 As String
MyName = Dir(dirname, vbDirectory) ' 找寻第一项。
Do While MyName <> "" ' 开始循环。
' 跳过当前的目录及上层目录。
If MyName <> "." And MyName <> ".." Then
' 使用位比较来确定 MyName 代表一目录。
If (GetAttr(dirname & MyName) And vbDirectory) = vbDirectory Then
dirname1 = dirname & MyName & "\"
chdir dirname1
Form1.Print dirname1
finddir (dirname1)
End If
End If
MyName = Dir ' 查找下一个目录。!!!出错就在这一句上,在从目录的底部往回返的时候出错的。
Loop
End Function
Private Sub Form_Load()
finddir ("C:\1\")

End Sub

目录为:c:\1\aa\cc\dd.
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bhhxd 2003-05-12
  • 打赏
  • 举报
回复
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。

以上是msdn中的原话
qbilbo 2003-05-12
  • 打赏
  • 举报
回复
可能是因为DIR函数不支持递归的原因吧。

改成下面这样就行了。
对了,你的这个函数为什么没有返回值?
Public Function FindDir(DirName As String)
Dim DirName1() As String, iCount As Long
Dim MyName As String
Dim i As Long

DirName = IIf(Right(DirName, 1) = "\", DirName, DirName + "\")

MyName = Dir(DirName, vbDirectory) ' 找寻第一项。
Do While MyName <> "" ' 开始循环。
' 跳过当前的目录及上层目录。
If MyName <> "." And MyName <> ".." Then
' 使用位比较来确定 MyName 代表一目录。
If (GetAttr(DirName & MyName) And vbDirectory) = vbDirectory Then
ReDim Preserve DirName1(iCount)
DirName1(iCount) = DirName & MyName & "\"
ChDir DirName1(iCount)
Form1.Print DirName1(iCount)
iCount = iCount + 1
'finddir (DirName1)
End If
End If
MyName = Dir ' 查找下一个目录。!!!出错就在这一句上,在从目录的底部往回返的时候出错的。
Loop

If TestBound(DirName1()) Then
For i = 0 To UBound(DirName1)
FindDir (DirName1(i))
Next
End If
End Function

Private Function TestBound(tString() As String) As Boolean
Dim i As Long

On Error GoTo ErrHandle
i = UBound(tString)
TestBound = True
Exit Function

ErrHandle:
TestBound = False

End Function

Private Sub Form_Load()
Me.AutoRedraw = True

FindDir ("C:\windows")

End Sub

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧