注册 登录
编程论坛 VB6论坛

编写关于dir的程序时出现问题

renxiaoyao36 发布于 2015-03-26 18:01, 679 次点击
以下是代码(红色为报错句)
Dim Rub
Dim sTmp As String * MAX_LEN '存放结果的固定长度的字符串
Dim nLength As Long '字符串的实际长度
Dim pidl As Long '某特殊目录在特殊目录列表中的位置
Dim sTmp2 As Integer '临时存储变量
Dim sTmp3(0 To 100) As Integer 'A数值存储数组"
Command1.Enabled = False

Dim ab As Integer
ListView1.ListItems.Add , , "获取Cookies目录"
SHGetSpecialFolderLocation 0, COOKIES, pidl
SHGetPathFromIDList pidl, sTmp
ListView1.ListItems(1).SubItems(1) = Left(sTmp, InStr(sTmp, Chr(0)) - 1)
ListView1.ListItems.Add , , "获取Temp目录"
sTmp2 = GetTempPath(MAX_LEN, sTmp)
ListView1.ListItems(2).SubItems(1) = Left(sTmp, sTmp2)
ListView1.ListItems.Add , , "获取System目录"
sTmp2 = GetSystemDirectory(sTmp, MAX_LEN)
ListView1.ListItems(3).SubItems(1) = Left(sTmp, sTmp2)
ListView1.ListItems.Add , , "获取网页临时文件目录"
SHGetSpecialFolderLocation 0, PAGETMP, pidl
SHGetPathFromIDList pidl, sTmp
ListView1.ListItems(4).SubItems(1) = Left(sTmp, InStr(sTmp, Chr(0)) - 1)


Dim a As Integer
ListView1.ListItems.Add , , "Cookies文件"
Rub = Dir(ListView1.ListItems(1).SubItems(1) & "\*.*")
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1

sss:
On Error GoTo sss2
Rub = Dir
ListView1.ListItems.Add , , "Cookies文件"
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1
GoTo sss
sss2:
On Error GoTo 0
ListView1.ListItems(a + 4).SubItems(1) = "搜索完毕!"
ListView1.ListItems(a + 4).SubItems(2) = ""
sTmp3(0) = a + 4

Rub = Dir(ListView1.ListItems(2).SubItems(1) & "*.*")
ListView1.ListItems.Add , , "Tmp文件"
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1
sss3:
On Error GoTo sss4
Rub = Dir
ListView1.ListItems.Add , , "Tmp文件"
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1
GoTo sss3
sss4:
ListView1.ListItems.Add , , "Tmp文件"
ListView1.ListItems(a + 5).SubItems(1) = "搜索完毕!"
sTmp3(1) = a + 5

On Error GoTo 0










Rub = Dir(ListView1.ListItems(3).SubItems(1) & "\*.*")
ListView1.ListItems.Add , , "网页临时文件"
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1
sss5:
On Error GoTo sss6
Rub = Dir
ListView1.ListItems.Add , , "网页临时文件"
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1
GoTo sss5
sss6:
On Error GoTo 0
ListView1.ListItems.Add , , "网页临时文件"
ListView1.ListItems(a + 5).SubItems(1) = "搜索完毕!"
sTmp3(1) = a + 5
报错讯息为:5号错误:无效的过程调用或参数。
不知道改动了什么出现了这个错误。

[ 本帖最后由 renxiaoyao36 于 2015-3-26 18:03 编辑 ]
8 回复
#2
renxiaoyao362015-03-26 18:02
这层发错了,多发了一次。

[ 本帖最后由 renxiaoyao36 于 2015-3-26 18:05 编辑 ]
#3
xzlxzlxzl2015-03-26 20:48
这代码写的...。
既有goto又有相类似的赋值语句,肯定优化空间大大的。
#4
lianyicq2015-03-27 09:53
dir函数在第一次调用时必须带参数。你查查程序跳转到sss3前,有没有调用过dir。
#5
renxiaoyao362015-03-28 21:35
回复 4楼 lianyicq
掉用过
#6
renxiaoyao362015-03-28 21:37
回复 5楼 renxiaoyao36
但是我重新更新过dir函数的值了
而且我第一次编写的时候没有加上第三个循环,只有两个循环却正常。
#7
renxiaoyao362015-03-30 16:04

请版主原谅,我这个很急求,必须要知道为什么,只能人工置顶了,请原谅。
#8
lianyicq2015-03-31 11:12
回复 7楼 renxiaoyao36
好不容易构建了你的工程环境。原代码是靠检错来进入下一类文件列表,但检错后,错误发生时DIR返回值为"",再次不含参数调用就出错。
如列cookies文件,全部改goto循环语句为
程序代码:
ListView1.ListItems.Add , , "Cookies文件"
Rub = Dir(ListView1.ListItems(1).SubItems(1) & "\*.*")
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1

While (Rub <> "")
Rub = Dir
ListView1.ListItems.Add , , "Cookies文件"
ListView1.ListItems(a + 5).SubItems(1) = Rub
ListView1.ListItems(a + 5).SubItems(2) = "等待删除"
a = a + 1
Wend

ListView1.ListItems(a + 4).SubItems(1) = "搜索完毕!"
ListView1.ListItems(a + 4).SubItems(2) = ""
sTmp3(0) = a + 4
这样列表都正常。


[ 本帖最后由 lianyicq 于 2015-3-31 11:15 编辑 ]
#9
renxiaoyao362015-04-05 09:58
抱歉,有事忘记结贴了
我的问题已经解决了。方法是:
将每个DIR模块分别写SUB,在需要使用DIR时用SUB来调用,就不会出现问题了。
很抱歉,没有结贴……
楼上版主说得对,很感谢!
1