0

この質問が以前に尋ねられたことは知っていますが、探している答えが見つかりません。ディレクトリを反復処理し、すべてのファイルを配列に読み込みたい。ディレクトリに含まれるファイルの数がわからないため、配列のサイズもわかりません。これを達成するための最良の方法は何ですか? 「ReDim」はパフォーマンスキラーだと読みましたが、利用可能なリストのようなコレクションが見つかりません...

何か不足していますか?

4

2 に答える 2

3

また

Redim arr(0) as String

それから

arr(ubound(arr)) = "newFilename"
ReDim Preserve arr(ubound(arr)+1)

ループの後

ReDim Preserve arr(ubound(arr)-1)

最後の空の要素だけ縮小します。


配列を使用する代わりに。Collectionまたはを使用できますDictionary

コレクションは、初期化時にサイズを知る必要はありません。メソッドを使用してアイテムを追加しますAdd()

実装の実際の例を見るにはthis、 およびを参照してください。that


Dir()関数を使用して繰り返し、ファイルの数を確認することにした場合は、サンプル関数を次に示します。

Sub Main()

    ReDim arr(FilesInDirectoryCount("C:\...")) As String

End Sub

Function FilesInDirectoryCount(path As String)
  Dim f As String, c As Long
  f = Dir$(path)
  Do While Len(f) <> 0
    c = c + 1
    f = Dir$
  Loop
  FilesInDirectoryCount = c
End Function

またはこれを使用します

Sub CountFiles()
    Dim strDir As String
    Dim fso As Object
    Dim objFiles As Object
    Dim obj As Object
    Dim lngFileCount As Long

    strDir = "C:\path..."

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set objFiles = fso.GetFolder(strDir).Files

    lngFileCount = objFiles.count

    MsgBox lngFileCount

    Set objFiles = Nothing
    Set fso = Nothing
    Set obj = Nothing

End Sub
于 2013-10-22T12:41:37.860 に答える
2

方法 1

1 つの方法 (多くの場合は標準的な方法) は、平均的なユース ケースに基づいて、配列をある程度任意にディメンション化することです。

配列のサイズを超えそうになったら、要素数を2 倍にリディメンションします。

最後に、実際に必要なサイズにサイズを変更します。

方法 2 (寝台)

ディレクトリをトラバースしてサイズを取得します。次に、正しいサイズの配列でコードを実行します。ただし、原子性がないため、ファイルシステムには適していません。このアプローチは、他のユースケースでもうまく機能します。ただし、ここでは使用しないでください。

于 2013-10-22T12:37:10.493 に答える