FindFirstFile()関数、FindNextFile()関数を利用して、指定したフォルダ内の ファイルをサブフォルダを含めて全て巡回します。サブフォルダの巡回は再起処理で行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <windows.h> /* 指定したフォルダ内のファイルをサブフォルダを含めて巡回する */ void FindDirectory ( std::wstring oFolderPath // フォルダパス ) { WIN32_FIND_DATA tFindFileData; // 全てのファイル oFolderPath += L "¥¥*.*" ; // 最初に一致するファイルを取得 HANDLE hFile = ::FindFirstFile( oFolderPath.c_str(), &tFindFileData ); if ( INVALID_HANDLE_VALUE == hFile ) { return ; } // L"¥¥*.*"を削除 oFolderPath = oFolderPath.substr( 0, oFolderPath.size() - 4 ); do { TCHAR * wpFileName = tFindFileData.cFileName; // フォルダかどうかを判定 if ( tFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { /* L"."とL".."はスキップ */ if ( L '.' == wpFileName[ 0 ] ) { if ( ( L '¥0' == wpFileName[ 1 ] ) || ( L '.' == wpFileName[ 1 ] && L '¥0' == wpFileName[ 2 ] ) ) { continue ; } } // フルパスの生成 std::wstring oFullPath = oFolderPath+ L "¥¥" + wpFileName; std::wcout << L "(dir )" << oFullPath << std::endl; // 再起してサブフォルダを巡回する FindDirectory( oFullPath ); } else { // フルパスの生成 std::wstring oFullPath = oFolderPath + L "¥¥" + wpFileName; std::wcout << L "(file)" << oFullPath << std::endl; } // 次に一致するファイルの検索 } while ( ::FindNextFile( hFile, &tFindFileData ) ); // 検索ハンドルを閉じる ::FindClose( hFile ); } int _tmain ( int argc , _TCHAR* argv[] ) { // 標準出力にユニコード出力する setlocale ( LC_ALL, "Japanese" ); // 指定したフォルダ内のファイルをサブフォルダを含めて巡回する FindDirectory( L "C:¥¥TestFolder" ); // 正常終了 return ( 0 ); } |
(dir )C:\TestFolder\FolderA
(file)C:\TestFolder\FolderA\FolderA-01.txt
(file)C:\TestFolder\FolderA\FolderA-02.txt
(dir )C:\TestFolder\FolderA\FolderB
(file)C:\TestFolder\FolderA\FolderB\FolderB-01.txt
(file)C:\TestFolder\FolderA\FolderB\FolderB-02.txt
(file)C:\TestFolder\TestFolder-01.txt
(file)C:\TestFolder\TestFolder-02.txt