关于目录遍历的问题

wstar 2004-11-16 08:13:50
我原来一直用dir来获得一个目录下的一级目录列表,后来发现有数量限制(32768),超过就溢出了:<求一算法获得某目录下一级目录的列表,只要一级目录的列表。
...全文
330 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
homezj 2004-11-17
  • 打赏
  • 举报
回复
这么大,用什么控件显示,都不能快起来,刷新一下也会很长时间,建议采用分页显示的办法。也不难的。
wstar 2004-11-17
  • 打赏
  • 举报
回复
Shell.Application没找到相关的方法呀,提示一下呀

用了半天,没找到文件夹方法...而且Shell.Application能实现,那么api也应该能实现呀...
tztz520 2004-11-17
  • 打赏
  • 举报
回复
\\后来发现有数量限制(32768),超过就溢出了:<\\
这个问题是listbox的问题.它只可以存最多32768条记录.你可以换个控件来显示,不是DIR的问题.
officecn 2004-11-17
  • 打赏
  • 举报
回复
你可以试一下WINAPI涵数:FINDFIRSTFILE FINDNEXT,可以的.
qiqi5521 2004-11-17
  • 打赏
  • 举报
回复
to: wstar(星) ( )
vb中的integer是有符号数,超过了32768就要溢出啦,你用一个long 来存储就可以了。
vb连无符号数都不提供,挺烦的
lxcc 2004-11-17
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim objShell, objFolder, subFolder

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.namespace("c:\winnt")

For Each subFolder In objFolder.Items
List1.AddItem subFolder.Name
Next

Set objFolder = Nothing
Set objShell = Nothing
Set subFolder = Nothing
End Sub
mingday 2004-11-17
  • 打赏
  • 举报
回复
关注
leolan 2004-11-17
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim sPath As String, sName As String

sPath = "C:\"
sName = Dir$(sPath, vbDirectory + vbNormal + vbHidden + vbArchive + vbReadOnly + vbSystem)
Do While sName <> ""
If sName <> "." And sName <> ".." Then
List1.AddItem sName
End If
sName = Dir$()
Loop

End Sub
creazyfish 2004-11-17
  • 打赏
  • 举报
回复
我一般用 lxcc(虫子|专注于抢分)的方法呵呵
蒋晟 2004-11-17
  • 打赏
  • 举报
回复
The ProgID for each of the Shell objects is shown in the following table.

Object ProgID
DIDiskQuotaUser Microsoft.DiskQuota.1
DiskQuotaControl Cannot late bind
Folder Shell.Application.NameSpace("...")
Folder2 Shell.Application.NameSpace("...")
FolderItem Shell.Application.NameSpace("...").Self or
Folder.Items.Item or Folder.ParseName
FolderItems Folder.Items
FolderItems2 Folder.Items
FolderItemVerb Shell.NameSpace("...").Self.Verbs.Item(i)
FolderItemVerbs FolderItem.Verbs or
Shell.NameSpace("...").Self.Verbs
IShellDispatch2 Shell.Application
IShellLinkDual2 Shell.NameSpace("...").Self.GetLink or
Shell.NameSpace("...").Items(i).GetLink
Shell Shell.Application
ShellFolderItem Shell.NameSpace("...").Self or
Shell.NameSpace("...").Items(i)
ShellFolderView Cannot late bind
ShellFolderViewOC Cannot late bind
ShellLinkObject Shell.NameSpace("...").Self.GetLink or
Shell.NameSpace("...").Items(i).GetLink
ShellUIHelper Cannot late bind
ShellWindows Shell.Windows or
ShellWindows._NewEnum
WebViewFolderContents Cannot late bind
  • 打赏
  • 举报
回复
自构一个控件吧,所幸只是起个显示作用,还是挺简单的。
wstar 2004-11-17
  • 打赏
  • 举报
回复
leolan(史留香) 超级感谢,这次真是受益匪浅,再感谢 lxcc(虫子|专注于抢分) ,jiangsheng(蒋晟.MSMVP2004Jan) 等等,谢谢,结贴
leolan 2004-11-17
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim sPath As String, sName As String

sPath = "C:\"
sName = Dir$(sPath, vbDirectory)
Do While sName <> ""
If sName <> "." And sName <> ".." Then
If GetAttr(sPath & sName) And Not vbArchive Then
List1.AddItem sName
End If
End If
sName = Dir$()
Loop

End Sub
wstar 2004-11-17
  • 打赏
  • 举报
回复
非常感谢 leolan(史留香) 和 lxcc(虫子|专注于抢分) ,可是你们的程序返回的是所有文件和目录,我不要文件,怎么区分?
wstar 2004-11-17
  • 打赏
  • 举报
回复
to: wstar(星) ( )
vb中的integer是有符号数,超过了32768就要溢出啦,你用一个long 来存储就可以了。
vb连无符号数都不提供,挺烦的

是dirlistbox的问题,你可以试一试,一个目录(C:\test)下有40000个目录,然后
dim i,k as long
dim j as string
dir1.path="c:\test"
k=dir1.listcount
for i=0 to 40000
j=dir1.list(i)
next i
超过32767就溢出了,呵呵,而且dir1.listcount是负数...
wstar 2004-11-17
  • 打赏
  • 举报
回复
\\后来发现有数量限制(32768),超过就溢出了:<\\
这个问题是listbox的问题.它只可以存最多32768条记录.你可以换个控件来显示,不是DIR的问题.

可能我说的不清楚,我用的是dirlistbox,他和listbox 一样,都不能返回32767以后的目录名字....
蒋晟 2004-11-16
  • 打赏
  • 举报
回复
用Shell.Application对象呢
wstar 2004-11-16
  • 打赏
  • 举报
回复
dirlistbox可以列出32767以上的目录,但dir1.listcount已经是负数了... 而且引用dir1.list(32767以上)就溢出了,环境是winxp+vb6.0,谢谢 lxcc(虫子|专注于抢分) 的算法,不过我不想使用FileSystemObject(norton报警,挺烦的),而且一直写绿色软件,除了标准控件我只用api,我想要api的一段算法来实现,先谢了
lxcc 2004-11-16
  • 打赏
  • 举报
回复
还可以再多
lxcc 2004-11-16
  • 打赏
  • 举报
回复
list1.count 也只能到32765 这个太慢了!
//我试过可以到40000
加载更多回复(6)

7,763

社区成员

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

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