由于您已经有一个集合中的文件(colFiles),第一个拥有项目集合的理由 - 依次处理它们 - 并不会让您将它们放在第二个列表中。为什么不直接解压每个文件而不是将其放入列表中?解压缩文件A不需要有关/访问文件夹中其他文件X的信息。因此,收集的第二个原因 - 在同一时间/处理一个物品时需要所有元素 - 也不适用。
如果你坚持第二个列表,所有都取决于你想要对它做什么/项目。如果您只想要一个名称列表,最简单的方法是将名称/路径作为关键字放在字典中。如果你想要名称排序,一个System.Collections.ArrayList/SortedList会更方便。如果您想使用文件的更多属性/属性(大小,日期,访问权限等) - a 断开连接的ADODB记录集将允许您将所有这些属性存储在(SQL)表中。
最后,但并非最不重要的,一个简单的原生的VBScript 阵列(尺寸为每个文件属性)可用于:正如你所知道的元素(colFiles.Count)的可能数目,您可以定义的大小循环之前的数组,循环中的项目分配以及ReDim在循环之后保留它。
请随你选,我会在本贴中添加示例代码。
P.S:
由于@Panayot给你的阵列和的ArrayList示例代码,这将是有意义的要求ADO记录集。
PPS:
对于烦恼的:
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
在Files集合的快照上循环 - 至少添加了这些内容。删除测试留作练习。
考虑使用普通的Dim fileArray和/或预先声明数组大小(ArrayList的.Capacity),因为使用.Files集合时,您在进入循环之前知道数字元素。 –
不错的一点,同意(+1)。 –