与Environment.ExpandEnvironmentVariables相反

时间:2013-03-10 13:28:21

标签: c# .net visual-studio directory environment-variables

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

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

例如:

  

C:\用户\用户\应用程序数据\本地\ FOO \杆

应该变成:

  

%LOCALAPPDATA%\ FOO \杆

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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 + "%");
    }
}