C++ 環境変数を含むパスをstd::stringに展開する方法
はじめに
パスに限らず、環境変数を含む文字列は、
WindowsAPIの ExpandEnvironmentStrings で展開できます。
std::string に展開する方法をメモ。
実装
#include <windows.h> #include <iostream> #include <string> // 環境変数を含むパスを展開する bool GetExpandEnvironmentPath(const std::string& path, std::string& dest) { dest.resize(ExpandEnvironmentStringsA(path.c_str(), nullptr, 0)); if (path.empty()) { return false; } ExpandEnvironmentStringsA(path.c_str(), &dest.front(), dest.size()); return true; } int main() { // 元のパス const char* basePath = "%tmp%\\data.bin"; // 展開 std::string resultPath; if (GetExpandEnvironmentPath(basePath, resultPath)) { std::cout << "展開前:" << basePath << std::endl; std::cout << "展開後:" << resultPath << std::endl; } else { std::cout << "失敗" << std::endl; } system("pause"); return 0; }
あとがき
今回は、stringに展開しましたが、
wstring なら ExpandEnvironmentStringsW で展開できます。