2008-11-07 4 views
0

Есть ли способ конвертировать специальные пути папки в полное имя файла (и обратно) или мне нужно закодировать свои собственные (не сложно, я знаю, но не имеет смысла, если это существует)Как конфертировать из специальных папок в полные имена файлов

eg Я хочу сохранить имя файла шаблона для приложения, которое пользователь может изменить, он существует в папке LocalApplicationData.

, что я хотел бы сохранить это местоположение файла в формате:

% LOCALAPPDATA% \ MyApp \ Templates \ Report Template.xls

так, что этот файл приложение может быть использовано многими пользователи, каждый пользователь при их открытии получит шаблон отчета из своего локального каталога приложений.

Я могу написать

replace("%LOCALAPPDATA%", _ 
    System.Environment.GetFolderPath(
     System.Environment.SpecialFolder.LocalApplicationData)) 

and vice versa 

, когда я пришел, чтобы сохранить местоположение файла, однако там System.IO (или аналогичный) вызов, чтобы сделать это для меня, вместо того, чтобы пройти через все возможные специальный папка?

ответ

4

Посмотрите: Environment.ExpandEnvironmentVariables

После некоторых поисков я не думаю, что там имеется встроенный способ преобразовать его обратно, хотя.

Вы можете сделать это, хотя:

static void Main(string[] args) 
{ 
    var values = Enum.GetValues(typeof(Environment.SpecialFolder)); 

    foreach (Environment.SpecialFolder value in values) 
     Console.WriteLine(value + " : " + Environment.GetFolderPath(value)); 

    Console.ReadKey(); 
} 
+0

ах ... Я действительно не должен быть на SO без чашки кофе утром. –

+0

Спасибо, я попробовал это первым, однако, хотя это работает с Visa, поскольку такие элементы, как% LOCALAPPDATA%, установлены, он не работает с XP, где эти специальные папки не заданы как переменные среды! – GalleySlave

+0

Я думаю, что это еще одна проблема. – chakrit

0

Обычный способ для Windows, чтобы определить «специальные папки» является их CSIDL. Environment.SpecialFolder - это всего лишь небольшая обертка вокруг него. Как вы отметили, в комментарии к сообщению чакрита большинство CSIDL просто не имеют соответствующих переменных среды. Это вероятная причина, по которой нет функции для поиска переменной окружения для нескольких CSIDL, которые делают.