わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

指定したフォルダ内のファイルをサブフォルダを含めて巡回する

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






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。