0

是否有与Environment.ExpandEnvironmentVariables方法相反的方法。

我的意思是,在给定路径后,该方法返回其 EnvironmentValue 对应项。

例如:

C:\users\user\AppData\Local\foo\bar

应该变成:

%LOCALAPPDATA%\foo\bar

(为了使配置文件可移植。)

4

2 回答 2

2

恐怕不存在这样的方法。更不用说你可以有多个环境变量指向同一个值。在这种情况下,您希望返回哪个变量?

于 2013-03-10T13:29:38.030 回答
1

在被告知没有这样的事情之后,我写了一个非常简单的版本。如果有人有任何建议,那就太棒了!

该方法替换了它可以找到的最长的环境变量。

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 + "%");
    }
}
于 2013-03-10T14:15:31.153 回答