Доброго времени суток. Есть ли "родной", быстрый способ получения абсолютного пути к каталогу или файлу из строки, в составе которой фигурирует системная переменная? Т.е. к примеру, из строки "%AppData%\AdminCAD\Dependent" должен получиться полный путь: "C:\Documents and Settings\Developer\Application Data\AdminCAD\Dependent"
| Код | static void Main(string[] args) { //Собственно вопрос: как проще всего получить полное имя каталога из строки, содержащей в себе переменную, //например AppData, как показано ниже? string x = @"%AppData%\AdminCAD\Dependent"; string y = Path.GetFullPath(x);//неверный результат Console.WriteLine("Вариант 1: x = {0}", x);
string z = Path.GetDirectoryName(x);//неверный результат Console.WriteLine("Вариант 2: x = {0}", x);
DirectoryInfo dir = new DirectoryInfo(x);//неверный результат Console.WriteLine("Вариант 3: x = {0}", dir.FullName);
//Следующий способ работает IDictionary dict = Environment.GetEnvironmentVariables(); foreach (DictionaryEntry item in dict) { //Приходится переводить всё в верхний регистр, иначе не сработает. //В Windows это не страшно, а вот в Linux так делать нельзя, т.е. для Linux придётся делать иначе... x = x.ToLower().Replace("%"+item.Key.ToString().ToLower()+"%", item.Value.ToString().ToLower()); } Console.WriteLine("Вариант 4: x = {0}", x); Console.ReadKey(); }
|
Результат:
| Цитата | Вариант 1: x = %AppData%\AdminCAD\Dependent Вариант 2: x = %AppData%\AdminCAD\Dependent Вариант 3: x = D:\MD\Visual Studio 2010\Projects\ConsoleApplication12\ConsoleApplication12\bin\Debug\%AppData%\AdminCAD\Dependent Вариант 4: x = c:\documents and settings\developer\application data\admincad\dependent
|
Можно, конечно же, написать свой метод расширения, который в дальнейшем и использовать, но вдруг уже имеется "родной" метод? Не хотелось бы велосипед изобретать. |