山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他フォルダー内のファイル名を検索する
概要
FindFirstFile APIとFindNextFile APIを用いてフォルダー内のファイル名を検索するプログラムである。
          E:¥testフォルダーについてエクスプローラによる表示結果と本プログラムの表示結果を以下に示す。
| エクスプローラでE:¥testを表示 | 本プログラムの実行結果 | 
|---|---|
|   | . .. Debug findfile1 findfile1.sdf findfile1.sln Release x64 | 
テスト環境
コンパイラ
Visual C++ 2008 Standard 32/64bitVisual C++ 2013 Express 32/64bit
プロジェクトの作成
Win32コンソールアプリケーション実行環境
Windows 8.1 Enterprise 64bitWindows 7 EnterPrise Service Pack 1 64bit
Windows Vista Ultimate Service Pack 2 32bit
Windows XP Professional Service Pack 3 32bit
プログラムソースの概要
_tmain関数
_tsetlocale関数によりUNICODE文字を標準出力に正しく表示させるためにロケールを設定します。FindFirstFile APIで検索条件を指定し最初の1個目のファイルの情報を取得します。
1個目の引数が検索条件です。E:¥testフォルダーのすべてのフォルダー名・ファイル名を検索するには、E:¥¥test¥¥*.*と記述します。
戻り値は検索ハンドルです。
戻り値がINVALID_HANDLE_VALUEの場合は、ファイルが見つからないことを示しています。
検索されたファイル名に関する情報はFindFileData構造体に格納されます。
FindFileData構造体メンバは以下の通りです。
DWORD  dwFileAttributes;       // 属性
FILETIME  ftCreateTime;        // 作成日時
FILETIME  ftLastAccessTime;    // 最終アクセス日時
FILETIME  ftLastWriteTime;     // 最終更新日時
DWORD  nFileSizeHigh;          // ファイルサイズ(上位32ビット)
DWORD  nFileSizeLow;           // ファイルサイズ(下位32ビット)
TCHAR  cFileName[MAX_PATH];    // ファイル名
TCHAR  cAlternateFileName[14]; // 8.3形式のファイル
FindFileData構造体のメンバであるcFileNameを_putts関数により標準出力へ表示します。次のファイルを検索するためには、FindNextFile APIを用います。戻り値が0の場合は、ファイルが見つからないことを示しているのでファイルの検索を終了させます。
検索が終了したらFindCloseにより検索ハンドルを解放します。
プログラムソース
// フォルダー内のファイル名を検索する
// Visual C++ 2013 32/64bit
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
void _tmain(void){
        //      UNICODE文字を標準出力に正しく表示させるためにロケールを設定
        _tsetlocale(LC_ALL, _TEXT(""));
        WIN32_FIND_DATA FindFileData;
        HANDLE hFind;
        hFind = FindFirstFile(_TEXT("E:¥¥test¥¥*.*"), &FindFileData);
        if (hFind != INVALID_HANDLE_VALUE){
                do{
                        _putts(FindFileData.cFileName);
                } while (FindNextFile(hFind, &FindFileData));
                FindClose(hFind);
        }
}
        ソースファイルのダウンロード
        Copyright (C) 2012 山本ワールド All Rights Reserved.
      
      
    