扩展的最佳方式是什么
${MyPath}/filename.txt to /home/user/filename.txt
或
%MyPath%/filename.txt to c:\Documents and settings\user\filename.txt
我看到wxWidgets有一个wxExpandEnvVars函数。在这种情况下我不能使用wxWidgets,所以我希望找到一个boost::filesystem等效或类似的。我只是使用home目录作为示例,我正在寻找通用路径扩展。
扩展的最佳方式是什么
${MyPath}/filename.txt to /home/user/filename.txt
或
%MyPath%/filename.txt to c:\Documents and settings\user\filename.txt
我看到wxWidgets有一个wxExpandEnvVars函数。在这种情况下我不能使用wxWidgets,所以我希望找到一个boost::filesystem等效或类似的。我只是使用home目录作为示例,我正在寻找通用路径扩展。
9条答案
按热度按时间hts6caw31#
对于UNIX(或至少是POSIX)系统,请查看wordexp:
看起来它甚至会做类似于global的扩展(这可能对你的特定情况有用,也可能没用)。
fgw7neuy2#
如果你有幸使用C++11,那么正则表达式是非常方便的。我写了一个就地更新的版本和一个声明式的版本。
这种方法的一个优点是它可以很容易地科普语法变化,也可以处理宽字符串。(在OS X上使用Clang编译和测试,带有标志-std=c++0x)
pokxtpni3#
在Windows上,你可以使用
ExpandEnvironmentStrings
。还不确定是否有Unix的等价物。h79rfbju4#
简单便携:
expand_environment_variables( "${HOME}/.myconfigfile" );
产生/home/joe/.myconfigfile
7xzttuei5#
由于问题被标记为“wxWidgets”,您可以使用wxConfig使用的
wxExpandEnvVars()
函数来扩展其环境变量。不幸的是,该函数本身没有文档记录,但它基本上做了您认为应该做的事情,并在所有平台上扩展$VAR
,$(VAR)
或${VAR}
的任何事件,并且仅在Windows下扩展%VAR%
。4sup72z86#
在C/ C++ 中,下面是我在Unix下解析环境变量的方法。fs_parm指针将包含要扩展的可能环境变量的filespec(或文本)。wrkSpc指向的空间必须是MAX_PATH+60个字符长。echo字符串中的双引号是为了防止通配符被处理。大多数默认shell应该能够处理这个问题。
对于MS Windows,请使用ExpandEnvironmentStrings()函数。
vjhs03f77#
这是我使用的:
oknwwptz8#
使用Qt,这对我来说很有效:
expand_environment_variables(“$HOME/.myconfigfile”);yields /home/martin/.myconfigfile(它也可以使用嵌套的扩展)
sbtkgmzw9#
我需要解析嵌套的env变量的能力,同时保留那些在环境中找不到的变量,以便另一个解析器处理,所以我基于@sfkleach的优秀答案提出了这个问题: