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 + "%");
}
}