我有一个问题,它让我发疯,
这是一行代码
qdName$ = Dir(fDir, ATTR_DIRECTORY)
fDir是目录路径。
目的:我想只检索fDir路径下的目录列表
现实:我得到所有对象,目录,文件等,我做错了什么?
这是一段代码
qdName$ = Dir(fDir, 16)
While qdName$ <> ""
If qdName <> "." And qdName <> ".." And InStr(1, qdName$, ".JPG", NoCaseNoPitch) = "0" Then
folders = folders + 1
If InStr(1, qdName, "tmp") = 0 Then
Name fDir + qdName As fDir + "tmp" + SetDoc.counter(0)
qdName$ = "tmp" + SetDoc.counter(0)
Set item = SetDoc.replaceItemValue("counter", CStr(CInt(SetDoc.counter(0)) + 1))
Call SetDoc.save(True, True)
End If
dList(dNo%) = qdName$
dNo% = dNo% + 1
qdName$ = Dir$()
Else
qdName$ = Dir$()
End If
Wend
答案 0 :(得分:1)
虽然代码不完整,但我认为从评论中可以清楚地看到:
代码的选项部分中没有Option declare
。
这意味着:不必声明变量。任何使用过的变量都将自动为空变量。
ATTR_DIRECTORY是lsconst.lss中的常量(位于Notes-客户端的程序目录中),其值为16,可以在设计器帮助中读取:
0普通文件ATTR_NORMAL
2隐藏文件ATTR_HIDDEN
4系统文件ATTR_SYSTEM
8卷标ATTR_VOLUME
16目录ATTR_DIRECTORY
如果不使用语句%include "lsconst.lss"
包含lsconst,则ATTR_DIRECTORY将为空。由于这是dir的可选参数,因此它将被处理,就好像它不存在一样 - 默认处理是ATTR_NORMAL。
作为解决方案,您应该始终在代码中添加Option Declare
并声明任何使用过的变量,因为这是避免此类奇怪错误的最佳做法。
要另外使用注释定义的常量,请使用%include语句。
另一种可能性是使用数字值而不是常数:
qdName$ = Dir(fDir, 16)
应该给出正确的结果。