- ベストアンサー
Windowsでファイルリストを取得する方法
- Windowsで任意のフォルダにあるファイル名のリストを取得する方法を教えてください。
- 作成された日付が古い順にリストを取得することは可能でしょうか。
- Visual Studioコードを使用したC++のサンプルコードで説明してください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
× strcpy(*ecoFileList, iter->second); ○ strcpy(*ecoFileList, iter->second.c_str());
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> ただこちらの環境だとエラーが出ました。。 > 間違い等ありましたら教えて下さい。 そちらの環境がいかなるものかわからんので教えようがない。 どこでどんなエラーがでたのかわからんので教えようがない。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 出来ましたらどなたかソートの方法を教えてください 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; } }
補足
ありがとうございます。ただこちらの環境だとエラーが出ました。。 間違い等ありましたら教えて下さい。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
できますとも。 WIN32_FIND_DATA構造体の中に作成された日時が格納されています。 それをキーにソートすればいい。
補足
ありがとうございます。出来ましたらどなたかソートの方法を教えてください
補足
すみません、一応考えてみましたが、文字列のコピーでエラーになります。 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++; } }