是否有与Environment.ExpandEnvironmentVariables方法相反的方法。
我的意思是,在给定路径后,该方法返回其 EnvironmentValue 对应项。
例如:
C:\users\user\AppData\Local\foo\bar
应该变成:
%LOCALAPPDATA%\foo\bar
(为了使配置文件可移植。)
是否有与Environment.ExpandEnvironmentVariables方法相反的方法。
我的意思是,在给定路径后,该方法返回其 EnvironmentValue 对应项。
例如:
C:\users\user\AppData\Local\foo\bar
应该变成:
%LOCALAPPDATA%\foo\bar
(为了使配置文件可移植。)
恐怕不存在这样的方法。更不用说你可以有多个环境变量指向同一个值。在这种情况下,您希望返回哪个变量?
在被告知没有这样的事情之后,我写了一个非常简单的版本。如果有人有任何建议,那就太棒了!
该方法替换了它可以找到的最长的环境变量。
public static class EnvironmentExtension
{
public static string ContractEnvironmentVariables(string path)
{
path = Path.GetFullPath(path).ToUpperInvariant();
DictionaryEntry currentEntry = new DictionaryEntry("","");
foreach (object key in Environment.GetEnvironmentVariables().Keys)
{
string value = (string)Environment.GetEnvironmentVariables()[key];
if (path.Contains(value.ToUpperInvariant()) && value.Length > ((string)currentEntry.Value).Length)
{
currentEntry.Key = (string)key;
currentEntry.Value = value;
}
}
return path.Replace((string)currentEntry.Value, "%" + (string)currentEntry.Key + "%");
}
}