Подтвердить что ты не робот

С# открыть файл, путь, начинающийся с% userprofile%

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

%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:\something, мне также нужно открыть его!

4b9b3361

Ответ 1

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

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

using(ostream = new FileStream(filePath, FileMode.Open))
{
   //...
}

Ответ 2

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

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

Ответ 4

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

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 ");"

Ответ 5

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