Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Абсолютное имя каталога, без переменных 
:(
    Опции темы
Compositum
Дата 21.1.2012, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



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

Можно, конечно же, написать свой метод расширения, который в дальнейшем и использовать, но вдруг уже имеется "родной" метод? Не хотелось бы велосипед изобретать.
PM   Вверх
diadiavova
Дата 21.1.2012, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Код

Console.WriteLine("Вариант 5: x = {0}", Environment.ExpandEnvironmentVariables(x));



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Compositum
Дата 21.1.2012, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(diadiavova @ 21.1.2012,  12:48)
Код

Console.WriteLine("Вариант 5: x = {0}", Environment.ExpandEnvironmentVariables(x));

а слона-то я и не заметил (с) smile

Огромное спасибо!
PM   Вверх
Compositum
Дата 22.1.2012, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



В этой же теме задам ещё один вопрос... Каталог, в котором находится модуль, код которого выполняется в текущий момент, я всегда вычисляю так:
Код

DirectoryInfo currentDir = new DirectoryInfo(Path.GetDirectoryName(this.GetType().Assembly.Location));


Использование 
Код

Environment.CurrentDirectory;

не годится, т.к. рабочий каталог может оказаться другим.

Может и для этого есть более лаконичный, "родной" метод?
PM   Вверх
Roha
Дата 23.1.2012, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.