Win32API ディレクトリを走査しファイルを検索する FindFirstFile FindNextFile FindClose

使用するAPI

  • FindFirstFile

  • FindNextFile

  • FindClose

  • 使用するデータ構造

  • WIN32_FIND_DATA

  • typedef struct _WIN32_FIND_DATA {
        DWORD  dwFileAttributes;       // 属性
        FILETIME  ftCreateTime;        // 作成日時
        FILETIME  ftLastAccessTime;    // 最終アクセス日時
        FILETIME  ftLastWriteTime;     // 最終更新日時
        DWORD  nFileSizeHigh;          // ファイルサイズ(上位32ビット)
        DWORD  nFileSizeLow;           // ファイルサイズ(下位32ビット)
        DWORD  dwReserved0;            // リパースタグ
        DWORD  dwReserved1;            // 予約
        TCHAR  cFileName[MAX_PATH];    // ファイル名
        TCHAR  cAlternateFileName[14]; // 8.3形式のファイル名
    } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;



    ポイント

  • FindFirstFileの第一引数には、検索したいファイルやディレクトリのワイルドカードを指定している。拡張子を指定したい場合は、「C:\\*.txt」などとできる。

  • WIN32_FIND_DATA構造体のdwFileAttributesとFILE_ATTRIBUTE_DIRECTORYのビットの論理積を取り、ファイルかディレクトリかを判断している

  • #include <windows.h>
    #include <stdio.h>
    int main()
    {
    	HANDLE hFind;
    	WIN32_FIND_DATA win32fd;
    
    	hFind = FindFirstFile("C:\\*.*", &win32fd);
    
    	if (hFind == INVALID_HANDLE_VALUE) {
    		return 1;
    	}
    
    	do {
    		if (win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
    			printf("%s (DIR)\n", win32fd.cFileName);
    		} else {
    			printf("%s\n", win32fd.cFileName);
    		}
    	} while (FindNextFile(hFind, &win32fd));
    
    	FindClose(hFind);
    	
    	return 0;
    }