由於您已經有一個集合中的文件(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)。 –