我们正在使用folder = objFSO.GetFolder(<path>)
来获取包含目录的文件列表。
然后我们在For Each
数组上folder.Files
输出文件名列表。
我们已经达到了文件夹中存在数千个文件且速度非常慢的问题,因此我们希望在屏幕上添加一些分页。所以每次都要显示500个文件。我不知道这是否可行,所有Google搜索都没有帮助。
有人能指出我正确的方向吗?
答案 0 :(得分:2)
首先,关于文件的列表,你能获得列表并将结果保存(缓存)到某个地方以加速重复访问吗?这是我们在获取大量文件时在.NET中使用的方法(我们使用的是ASP.NET网页,因此我们只使用WebCache.Set,但我想如果需要,可以将其写入文本文件)。
我看到一些轶事证据here,在列出大量文件时FSO非常慢:
未解决的一个问题是速度。我有一个小的VB应用程序,它使用FileSystemObject循环文件夹中的文件。花了大概。 5-7分钟只需浏览给定文件夹中的每个文件(约2200个文件)。当我切换到使用DIR()命令时,我可以在大约6-10秒内遍历文件。 DIR()也有局限性,但速度因素是对FileSystemObject的巨大考虑。
显然,一旦你有了这个列表,你就可以使用偏移/页面大小一次循环500个
编辑:我提供了一个关于如何使用WScript.Shell从我发现的几篇aspfaq.com文章中做到这一点的例子(1 | 2)
Set objWShell = CreateObject("WScript.Shell")
Set objCmd = objWShell.Exec("%COMSPEC% /C dir c:\")
strPResult = objCmd.StdOut.Readall()
答案 1 :(得分:0)
几年前我写了一个在线文件浏览器(可用here),发现它正在读取文件大小,这减慢了FSO文件列表的速度。一旦我跳过它,那么上市就快速闪电了。
对于分页,我建议从文件名中创建一个“断开连接”的ado记录集,然后将其用于名称的实际导航...然后你已经内置了分页...以及排序和搜索。如果您对代码示例感兴趣,请告诉我。