c # открытый файл, путь начинается с% userprofile% - PullRequest
38 голосов
/ 03 апреля 2012

У меня простая проблема.У меня есть путь к файлу в каталоге пользователя, который выглядит следующим образом:

%USERPROFILE%\AppData\Local\MyProg\settings.file

Когда я пытаюсь открыть его как файл

ostream = new FileStream(fileName, FileMode.Open);

Он выдает ошибку, потому что пытается добавить%userprofile% к текущему каталогу, поэтому он становится:

C:\Program Files\MyProg\%USERPROFILE%\AppData\Local\MyProg\settings.file

Как мне заставить его распознавать, что путь, начинающийся с %USERPROFILE%, является абсолютным, а не относительным путем?

PS: я не могу использовать

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

, потому что мне нужно просто открыть файл по его имени.Пользователь указывает имя.Если пользователь указывает «settings.file», мне нужно открыть файл относительно программы dir, если пользователь указывает путь, начинающийся с %USERPROFILE% или какой-то другой вещи, которая преобразуется в C: \ что-то, мне также нужно открыть его!

Ответы [ 5 ]

73 голосов
/ 03 апреля 2012

Используйте Environment.ExpandEnvironmentVariables на пути перед его использованием.

var pathWithEnv = @"%USERPROFILE%\AppData\Local\MyProg\settings.file";
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);

using(ostream = new FileStream(filePath, FileMode.Open))
{
   //...
}
5 голосов
/ 03 апреля 2012

Попробуйте использовать ExpandEnvironmentVariables в пути.

5 голосов
/ 03 апреля 2012

Используйте Environment.ExpandEnvironmentVariables статический метод:

string fileName= Environment.ExpandEnvironmentVariables(fileName);
ostream = new FileStream(fileName, FileMode.Open);
0 голосов
/ 08 января 2018

Я использую это в своей библиотеке утилит.

using System;
namespace Utilities
{
    public static class MyProfile
   {
        public static string Path(string target)
        {
            string basePath = 
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + 
@"\Automation\";
            return basePath + target;
        }
    }
}

Так что я могу просто использовать, например, "string testBenchPath = MyProfile.Path (" TestResults ");"

0 голосов
/ 30 июня 2013

Вы также можете использовать константу Environment.Username.И переменная %USERPROFILE%, и эта переменная окружения указывают на одно и то же (который является зарегистрированным пользователем).Но если вы выберете этот путь, вам придется объединить путь самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...