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 に答える