指定したディレクトリにあるファイル数の取得方法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
シュン

指定したディレクトリにあるファイル数の取得方法

#1 投稿記事 by シュン »

リストビューにファイル一覧を表示するファイラーを作っているのですが、
指定したディレクトリにある、ファイル数を取得するにはどうすればいいのでしょうか。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#2 投稿記事 by hira »

http://forums.belution.com/ja/vc/000/124/67s.shtml
↑ファイル数だけが欲しいときでも、ワイルドカードで検索していくしかないようです…。

ということで、とりあえず関数にまとめてみました。

コード: 全て選択

'前の文字へのポインタを返却(マルチバイト対応)
Declare Function CharPrev Lib "user32" Alias "CharPrevA" (lpszStart As *Byte,lpszCurrent As *Byte) As *Byte

'文字列が本当に \ で終わっているか判定する(マルチバイト対応)
Function EndYen(CheckStr As String) As Long
Dim Ptr As *Byte,Ptr2 As *Byte
	Ptr=StrPtr(CheckStr):Ptr2=Ptr+Len(CheckStr)
	EndYen=-(GetByte(Ptr2-1)=&H5C And Ptr2-CharPrev(Ptr,Ptr2)=1)
End Function

'ディレクトリ内のファイル数取得
Function GetFileCount(strDirectory As String) As Long
Dim hFind As HANDLE
Dim udtFindData As WIN32_FIND_DATA
Dim iCount As Long
Dim lpMsgBuf As BytePtr
	With udtFindData
		iCount=0
		'ワイルドカード文字列生成
		If EndYen(strDirectory) Then
			'\ で終わっているとき
			strDirectory=strDirectory & "*"
		Else
			'\ で終わっていないとき
			strDirectory=strDirectory & "\*"
		End If
		hFind=FindFirstFile(strDirectory,udtFindData)
		If hFind=INVALID_HANDLE_VALUE Then
			'Error
			GetFileCount=-1
		Else
			Do
				'自分自身 & 親ディレクトリは除外してカウント
				If lstrcmp(.cFileName,".")<>0 And lstrcmp(.cFileName,"..")<>0 Then iCount++
			Loop While FindNextFile(hFind,udtFindData)
			FindClose(hFind)
			GetFileCount=iCount
		End If
	End With
End Function
※指定ディレクトリ内に含まれるディレクトリ数を除外して数えたい場合などは WIN32_FIND_DATA 構造体に dwFileAttributes というメンバがありますのでそれを利用してください。
※パスの区切り文字は \ しか対応してません(^^;;
ゲスト

#3 投稿記事 by ゲスト »

試してみたら、

If EndYen(strDirectory) Then
'\ で終わっているとき
strDirectory=strDirectory & "*.txt"
Else
'\ で終わっていないとき
strDirectory=strDirectory & "\*.txt"
End If

とか、できるみたいですけど。

あの掲示板では、特定の拡張子のみって言ってましたけど
複数でなければ、いける気が…
返信する