С# открыть файл, путь, начинающийся с% 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, мне также нужно открыть его!
Ответы
Ответ 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);
Ответ 3
Попробуйте использовать ExpandEnvironmentVariables на пути.
Ответ 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%
и эта переменная указывают то же самое (это текущий зарегистрированный пользователь). Но если вы выберете этот путь, вы должны сами конкатенировать путь.