指定ディレクトリ内のファイル数を取得          <TOP>


指定したディレクトリ内のファイル数を取得します。ワイルドカード、および拡張子を指定することが可能です。

FindFirstFile 指定したファイル名に一致するファイルやディレクトリを検索

FindNextFile FindFirstFile()関数で検出したファイルの次を検出

FindClose ファイル検索ハンドルをクローズ

 

左:パスをC:\に、ファイル名はワイルドカードを指定した場合    右:パスをC:\Windows\System32に指定した場合

 

左:拡張子にdllを指定した場合    右:拡張子にiniを指定した場合

 

 

'================================================================
'= 指定ディレクトリ内のファイル数を取得
'=    (FileCount.bas)
'================================================================
#include "Windows.bi"

#define MAX_PATH 260
#define INVALID_HANDLE_VALUE -1         '見つからない場合
#define FILE_ATTRIBUTE_DIRECTORY &H10   'ディレクトリ属性

Type FILETIME
    dwLowDateTime  As Long
    dwHighDateTime As Long
End Type

Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime   As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime  As FILETIME
    nFileSizeHigh    As Long
    nFileSizeLow     As Long
    dwReserved0      As Long
    dwReserved1      As Long
    cFileName        As String * MAX_PATH
    cAlternate       As String * 14
End Type

' 指定したファイル名に一致するファイルやディレクトリを検索
Declare Function Api_FindFirstFile& Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName$, lpFindFileData As WIN32_FIND_DATA)

' FindFirstFile()関数で検出したファイルの次を検出
Declare Function Api_FindNextFile& Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile&, lpFindFileData As WIN32_FIND_DATA)

' ファイル検索ハンドルをクローズ
Declare Function Api_FindClose& Lib "kernel32" Alias "FindClose" (ByVal hFindFile&)

Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start ()
    Edit1.SetWindowText "C:\"
    Edit2.SetWindowText "*.*"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var FindData As WIN32_FIND_DATA
    Var sPath As String
    Var sName As String
    Var CountFile As Integer
    Var hFile As Long

    sPath = Edit1.GetWindowText()
    sName = Edit2.GetWindowText()
    CountFile = 0

    If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
    sPath = sPath & sName

    hFile = Api_FindFirstFile(sPath, FindData)

    If hFile = INVALID_HANDLE_VALUE Then
        Text1.SetWindowText "該当するファイルはありません!"
        Exit Sub
    End If

    If (FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then CountFile = 1

    Do While Api_FindNextFile(hFile, FindData)
        If (FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then CountFile = CountFile + 1
    Loop

    Text1.SetWindowText Trim$(Str$(CountFile)) & "個のファイルがあります!"

    Ret = Api_FindClose(hFile)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End