• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイル名のリスト取得について2)

Windowsでファイルリストを取得する方法

このQ&Aのポイント
  • Windowsで任意のフォルダにあるファイル名のリストを取得する方法を教えてください。
  • 作成された日付が古い順にリストを取得することは可能でしょうか。
  • Visual Studioコードを使用したC++のサンプルコードで説明してください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

× strcpy(*ecoFileList, iter->second); ○ strcpy(*ecoFileList, iter->second.c_str());

その他の回答 (3)

回答No.3

> ただこちらの環境だとエラーが出ました。。 > 間違い等ありましたら教えて下さい。 そちらの環境がいかなるものかわからんので教えようがない。 どこでどんなエラーがでたのかわからんので教えようがない。

babel05177
質問者

補足

すみません、一応考えてみましたが、文字列のコピーでエラーになります。 error C2664: 'strcpy' : 2 番目の引数を 'std::string' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) との事です。 これで解決出来るのですが、おわかりですか? charにコピー出来るなら何を使用しても構わないのですが(strcpyを使用しています) int DML_Backup::searchEcoDataFileName(char (*ecoFileList)[32]) { map_type files; WIN32_FIND_DATA find_data; HANDLE handle = FindFirstFile("*.ecd", &find_data); if ( handle != INVALID_HANDLE_VALUE) { do { files.insert(map_type::value_type( find_data.ftLastWriteTime, find_data.cFileName)); } while ( FindNextFile( handle, &find_data) ); FindClose(handle); } char string[32]; for ( map_type::iterator iter = files.begin(); iter != files.end(); ++iter ) { strcpy(*ecoFileList, iter->second); ecoFileList++; } }

回答No.2

> 出来ましたらどなたかソートの方法を教えてください C++で書いてみた。 Cはメンドクセーので勘弁して。 #include <windows.h> // FindFirstFile,FindNextFile, etc. #include <utility> // pair #include <map> // multimap #include <string> // string #include <iostream> // cout, endl #include <iomanip> // setfill, setw using namespace std; bool operator<(const FILETIME& x, const FILETIME& y) { if ( x.dwHighDateTime < y.dwHighDateTime ) return true; if ( y.dwHighDateTime < x.dwHighDateTime ) return false; return x.dwLowDateTime < y.dwLowDateTime; } int main() { multimap<FILETIME,string> files; WIN32_FIND_DATA ffd; HANDLE h = FindFirstFile("d:\\work\\*.cpp", &ffd); if ( h != INVALID_HANDLE_VALUE ) { do { files.insert(make_pair(ffd.ftCreationTime, ffd.cFileName)); } while ( FindNextFile(h, &ffd) ); FindClose(h); } for ( auto iter = files.begin(); iter != files.end(); ++iter ) { SYSTEMTIME t; FileTimeToSystemTime(&iter->first,&t); cout << setfill('0'); cout << setw(4) << t.wYear << '/' << setw(2) << t.wMonth << '/' << setw(2) << t.wDay << ' ' << setw(2) << t.wHour << ':' << setw(2) << t.wMinute << ':' << setw(2) << t.wSecond << '.' << t.wMilliseconds << '\t' << iter->second << endl; } }

babel05177
質問者

補足

ありがとうございます。ただこちらの環境だとエラーが出ました。。 間違い等ありましたら教えて下さい。

回答No.1

できますとも。 WIN32_FIND_DATA構造体の中に作成された日時が格納されています。 それをキーにソートすればいい。

参考URL:
http://msdn.microsoft.com/en-us/library/aa365740.aspx
babel05177
質問者

補足

ありがとうございます。出来ましたらどなたかソートの方法を教えてください

関連するQ&A