【问题标题】:Using Windows Environment Variable in Native Code在本机代码中使用 Windows 环境变量
【发布时间】:2011-06-14 21:50:21
【问题描述】:
// 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

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

【问题讨论】:

    标签: windows winapi environment-variables


    【解决方案1】:

    您需要显式扩展环境变量。一种方法是使用 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

    【讨论】:

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

    尝试使用GetEnvironmentVariable 函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-01
      • 2017-06-07
      • 1970-01-01
      • 2012-04-16
      • 2017-08-11
      • 1970-01-01
      • 2015-08-20
      • 2023-03-15
      相关资源
      最近更新 更多