由于您已经将文件放在集合中(colFiles),因此拥有项目集合的第一个原因 - 依次处理它们 - 不会让您将它们放在第二个列表中。为什么不直接解压缩每个文件而不是将其放入列表中?要解压缩文件 A,您不需要有关/访问文件夹中其他文件 X 的信息。因此,集合的第二个原因 - 同时需要所有元素/处理一个项目时 - 也不适用。
如果你坚持第二个清单,一切都取决于你想用它/这些项目做什么。如果您只想要一个名称列表,最简单的方法是将名称/路径作为键放在Dictionary中。如果要对名称进行排序,System.Collections.ArrayList/SortedList会更方便。如果您想使用文件的更多属性/属性——大小、日期、访问权限……——断开连接的 ADODB 记录集将允许您将所有这些属性存储在 (SQL) 表中。
最后但并非最不重要的一点是,可以使用一个简单的原生 VBScript数组(针对每个文件的属性进行标注):由于您知道可能的元素数量 (colFiles.Count),您可以在循环之前定义数组的大小,分配循环中的项目,并在循环后 ReDim 保留它。
任你选择,我将在此帖子中添加示例代码。
PS:
由于@Panayot 为您提供了 Arrays 和 ArrayLists 的示例代码,因此请求 ADO Recordset 是有意义的。
PP:
对于担心者:
Dim oFS : Set oFS = CreateObject( "Scripting.FileSystemObject" )
Dim sDir : sDir = "..\testdata\testFilesCollection"
Dim nFile, sFile, oFile, i
If oFS.FolderExists( sDir ) Then oFS.DeleteFolder sDir
oFS.CreateFolder sDir
WScript.Echo "----- Creating", cnMax, "files"
For nFile = 1 To cnMax
sFile = nFile & ".txt"
oFS.CreateTextFile oFS.BuildPath( sDir, sFile )
WScript.Echo sFile, "created"
Next
WScript.Echo "----- Looping over", cnMax, "files and creating", cnMax, "more"
i = 0
For Each oFile In oFS.GetFolder( sDir ).Files
If i <= cnMax Then
sFile = Chr(65 + i) & ".txt"
oFS.CreateTextFile oFS.BuildPath( sDir, sFile )
End If
i = i + 1
WScript.Echo oFile.Name, "seen", sFile, "created"
Next
WScript.Echo "----- Looping over", 2 * cnMax, "files"
For Each oFile In oFS.GetFolder( sDir ).Files
WScript.Echo oFile.Name, "seen"
Next
输出:
----- Creating 3 files
1.txt created
2.txt created
3.txt created
----- Looping over 3 files and creating 3 more
2.txt seen A.txt created
3.txt seen B.txt created
1.txt seen C.txt created
----- Looping over 6 files
B.txt seen
2.txt seen
C.txt seen
A.txt seen
3.txt seen
1.txt seen
[文件集合是一个快照] == @Panayot 的论点/证据 ==>For Each
文件集合的快照上的循环 - 至少添加。删除测试留作练习。