.Net использование специальных обозначений папок - PullRequest
3 голосов
/ 13 сентября 2011

Я хочу иметь возможность сделать что-то вроде этого:

IO.Directory.Exists("%USERPROFILE%")

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

...
LocalDbDirectory = %USERPROFILE%\Application Data\My Toolkit\
...

Или я мог бы хотеть, чтобы это было в сетевом местоположении, в этом случае это читало бы что-то вроде:

...
LocalDbDirectory = N:\Common\My Toolkit Databases\
...

Поэтому мне нужно иметь возможность интерпретировать сокращенную запись с помощью таких методов, как IO.Directory.Exists (...) или эквивалентных.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 13 сентября 2011

Вам нужно запустить их через Environment.ExpandEnvironmentVariables(path); , где путь равен @"%USERPROFILE%\Application Data\My Toolkit\" (Это не повредит при использовании путей, которые не содержат %% отформатированные токены)

3 голосов
/ 13 сентября 2011

Если сокращения являются допустимыми переменными среды, вы можете разрешить их значение:

    static void Main(string[] args)
    {
        string val = Environment.ExpandEnvironmentVariables("%USERPROFILE%");
        Console.WriteLine(val);
        Console.Read();
    }

Начиная с .NET 4, поддержка специальных папок включает профиль пользователя:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
...