指定ディレクトリ内のファイル数を取得 <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