わびさびサンプルソース

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

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

FindFirstFile()関数、FindNextFile()関数を利用して、指定したフォルダ内の ファイルをサブフォルダを含めて全て巡回します。サブフォルダの巡回は再起処理で行っています。

#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などのプログラムのサンプルコードやフリーソフトを提供します。