Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Абсолютное имя каталога, без переменных


Автор: Compositum 21.1.2012, 10:37
Доброго времени суток. Есть ли "родной", быстрый способ получения абсолютного пути к каталогу или файлу из строки, в составе которой фигурирует системная переменная?
Т.е. к примеру, из строки "%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

Можно, конечно же, написать свой метод расширения, который в дальнейшем и использовать, но вдруг уже имеется "родной" метод? Не хотелось бы велосипед изобретать.

Автор: Fortnox 24.1.2012, 00:24
Если используется системная переменная:
Код

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)