Skip to content

Instantly share code, notes, and snippets.

@tanjo
Last active July 13, 2017 05:04
Show Gist options
  • Save tanjo/19dba8873fc5b6a8aac7 to your computer and use it in GitHub Desktop.
Save tanjo/19dba8873fc5b6a8aac7 to your computer and use it in GitHub Desktop.
【VC】フォルダのファイル一覧取得してリストで返す【C++】

フォルダのファイル一覧取得

過去記事のシンボリックリンクのようなもの

【VC】フォルダのファイル一覧取得してリストで返す【C++】 http://tanjoin.hatenablog.com/entry/20110810/1312966845

設定

まず、設定として

[プロジェクト(P)]

[hogehogeのプロパティ]

[構築プロパティ]

[プロジェクトの既定値]

[文字セット]

[マルチ バイト文字セットを使用する]

に設定する

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <Windows.h>
using namespace std;
class Dir
{
public:
// コンストラクタ
Dir(void){}
// デストラクタ
virtual ~Dir(void){}
// ファイル一覧取得
// folder : フォルダの絶対パスを入力とする
// 例 : "D:\\Users\\Pictures\\"
static vector<string> read(string folder){
// 宣言
vector<string> fileList;
HANDLE hFind;
WIN32_FIND_DATA fd;
// ファイル名検索のためにワイルドカード追加
// 例 : "D:\\Users\\Pictures\\*.*"
stringstream ss;
ss << folder;
string::iterator itr = folder.end();
itr--;
if(*itr != '\\') ss << '\\';
ss << "*.*";
// ファイル探索
// FindFirstFile(ファイル名, &fd);
hFind = FindFirstFile(ss.str().c_str(), &fd);
// 検索失敗
if(hFind == INVALID_HANDLE_VALUE){
std::cout << "ファイル一覧を取得できませんでした" << std::endl;
exit(1); // エラー終了
}
// ファイル名をリストに格納するためのループ
do{
// フォルダは除く
if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& !(fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
{
//ファイル名をリストに格納
char *file = fd.cFileName;
string str = file;
fileList.push_back(str);
}
}while(FindNextFile(hFind, &fd)); //次のファイルを探索
// hFindのクローズ
FindClose(hFind);
return fileList;
}
};
int main(int argc, char *argv[])
{
// ファイル入力
std::vector<std::string> backfilelist = Dir::read("D:\\Users\\Pictures\\");
for(int i = 0; i < backfilelist.size(); i++){
std::cout << backfilelist[i] << std::endl;
}
return 0;
}
@mimimisa
Copy link

mimimisa commented Jul 13, 2017

すみません。質問です。
上記のコードを実行したら以下のエラーが出てきてしまいました。
どうしたらいいでしょうか。
error C2664: 'FindFirstFileW' : 1 番目の引数を 'const char *' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 37行目
error C2440: '初期化中' : 'WCHAR [260]' から 'char *' に変換できません。 52行目

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment