①ファイル名を取得(wchar_t で )
②自然ソート
③必要ならcharへ変換
というステップで行います。
この記事の核心自然ソートです。前提として、ファイル名は
std::vector<std::wstring>
で管理されています。
StrCmpLogicalWを使う時はShlwapi.hをインクルード、shlwapi.libをリンクします。
#include <Shlwapi.h> #pragma comment(lib,"shlwapi.lib")
void sort_file_names(std::vector<std::wstring>& fnlist) { std::sort( fnlist.begin(), fnlist.end(),
//ラムダ関数 [](const std::wstring& n1, const std::wstring& n2) { return StrCmpLogicalW(n1.c_str(), n2.c_str()) < 0; } ); }
ファイル名一覧を取得。StrcmpLogicalWがワイド文字専用なので、ファイル一覧の段階からワイド文字で取得します。
https://suzulang.com/win32api-get-file-list/