在本机代码中使用 Windows 环境变量

Ben*_*min 2 windows winapi environment-variables

// I have a permission to create a file to Program Files
const std::wstring sFileName = L"%ProgramFiles%\\aaa.txt";
HANDLE h = CreateFileW(
  sFileName.c_str(),
  GENERIC_READ,
  FILE_SHARE_DELETE,
  0,
  CREATE_ALWAYS,
  0,
  0);
// INVALID_HANDLE_VALUE with ERROR_PATH_NOT_FOUND
Run Code Online (Sandbox Code Playgroud)

我预计它会使C:\Program Files\aaa.txtC:\Program Files (x86)\aaa.txt取决于操作系统的环境。但它没有用。
怎么了?如何在本机代码中使用环境变量?

Rob*_*ick 5

您需要显式扩展环境变量。一种方法是使用 Win32 API 的 ExpandEnvironmentStrings 或 ExpandEnvironmentStringsForUser

看:

http://msdn.microsoft.com/en-us/library/ms724265(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/bb762275(v=vs.85).aspx

  • @david - 这完全取决于上下文。问题不是“我如何找到环境变量的值?” - 我将上下文读取为现有字符串中的变量扩展。如果 OP 的字符串可能包含也可能不包含环境变量(每个示例为“%ProgramFiles%\\aaa.txt”) - 他们需要首先编写一个解析器来提取 0..N 变量然后重建所需的字符串......或使用我建议的函数。 (2认同)