VB初心者です。
ものすごく簡単な質問かもしれないのですが・・・

VB6で、例えばCドライブにある全てのファイルの数を調べるにはどうすればいいのでしょうか?ルートにあるファイルの数ではなく、ドライブにある全てのファイルの数です。DOSで「DIR /S」ってすると、全てのファイルの数がわかりますよね?そんな感じで。隠し属性やシステム属性のファイルも全てです。

わかりにくい説明で申し訳ないのですが、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

適当なAPI関数が見つからなかったので、私は自分で関数を作りました。



checkNameに入れるDir関数の第2引数の定数で、ファイルの属性を指定できます。
下の例では、通常ファイル、システムファイル、隠しファイル、読取専用ファイルをすべて配列に格納します。

では。

'FolderName内の全ファイル名(フルパス)をallFile()に格納して、ファイル数を返す
Public Function FileArray(FolderName As String, allFile() As String) As Long

Dim setPath As String '現在のパス
Dim checkName As String '調べるファイル(フォルダ)
Dim checkFlag As Boolean '繰り返しの終了判定
Dim pathCount As Long '処理するパスの個数
Dim pathList() As String 'パス名のリスト
Dim fc As Long 'ファイル数

If (GetAttr(FolderName) And vbDirectory) <> 0 Then
If Right(FolderName, 1) <> "\" Then
FolderName = FolderName & "\"
End If

fc = 0
pathCount = 0
setPath = FolderName
checkFlag = True
Do While checkFlag = True
checkName = Dir(setPath & "*.*", vbNormal + vbSystem + vbReadOnly + vbHidden + vbDirectory)
Do While checkName <> ""
If checkName <> "." And checkName <> ".." Then
If (GetAttr(setPath & checkName) And vbDirectory) <> 0 Then
pathCount = pathCount + 1
ReDim Preserve pathList(pathCount)
pathList(pathCount) = setPath & checkName
Else
ReDim Preserve allFile(fc)
allFile(fc) = setPath & checkName
fc = fc + 1
End If
End If
checkName = Dir()
Loop
If pathCount = 0 Then
checkFlag = False
Else
setPath = pathList(pathCount) & "\"
pathCount = pathCount - 1
End If
Loop
If fc = 0 Then
ReDim allFile(fc)
allFile(fc) = ""
End If
FileArray = fc
Else
FileArray = 1
End If

End Function
    • good
    • 0
この回答へのお礼

素早い回答、本当にありがとうございました。
困っていたので感激したのですが・・・。ごめんなさい。初心者の私には理解できませんでした。コピーして最低限の部分だけ修正したのですが、うまく動きませんでした。。。(T-T)考えに考えた末、なんとか自分で作成することができました(新たな問題が出てきて、結局完成してないんですが。(T-T)(T-T)(T-T))。
せっかく回答していただいたのに、申し訳ないです。。。もっと勉強しますね。

お礼日時:2001/09/28 10:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報