FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C++で指定フォルダ中のファイルリストを取得する機能

C++で指定フォルダ中のファイルリストを取得する機能を作ってみました。

とはいっても、


役に立ちそうで役に立たないブログ
【VC】フォルダのファイル一覧取得してリストで返す【C++】


こちらで発見したソースを殆ど丸ごとコピーして、下記の若干の改良と修正を加えたものです。

  • クライアントからフィルタを指定できる
  • 処理失敗時にはプログラム終了ではなく例外を投げる
  • VCのビルド設定に依存せず常にマルチバイトで処理する


些細な違いですが、このほうが若干使いやすいのではないかと思います。


では、以降コードです。

#pragma once

#include <sstream>
#include <vector>
#include <string>
#include <exception>

#include <Windows.h>

class Directory
{
public:
    static std::vector<std::string> GetFiles(const std::string& dir_path);
    static std::vector<std::string> GetFiles(const std::string& dir_path, const std::string& filter);
};


//! 指定フォルダのファイルを取得する
//! ex: std::vector<std::string> path = util::Directory::GetFiles("C:\\aa\\");
inline
std::vector<std::string> Directory::GetFiles(const std::string& dir_path)
{
    return GetFiles(dir_path, "*.*");
}

//! 指定フォルダのファイルを取得する
//! ex: std::vector<std::string> path = util::Directory::GetFiles("C:\\aa\\", "*.png");
inline
std::vector<std::string> Directory::GetFiles(const std::string& dir_path, const std::string& filter)
{
    WIN32_FIND_DATAA fd;

    std::string ss = dir_path + filter;
    HANDLE hFind = FindFirstFileA(ss.c_str(), &fd);

    // 検索失敗
    if (hFind == INVALID_HANDLE_VALUE)
    {
        throw std::exception("util::Directory::GetFiles failed");
    }

    std::vector<std::string> fileList;
    do
    {
        // フォルダは除く
        if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            continue;
        // 隠しファイルは除く
        if (fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
            continue;

        fileList.push_back(fd.cFileName);
    } while(FindNextFileA(hFind, &fd));

    FindClose(hFind);

    return fileList;
}


最近ではすっかりQtを使うことが多くなってしまいました。

Qtを使う場合は、QDir::entryListを呼び出すだけで十分なのですが、MFCなんかを使わざるを得ない状況
では、こんな機能があれば若干は便利になるかと思います。

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
09 | 2018/10 | 11
- 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 - - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。