我有一个简单的问题。我有一个用户目录中文件的路径,如下所示:
%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”,我需要打开一个相对于程序目录的文件,如果用户指定以%USERPROFILE%
开头的路径或其他转换为C:\的东西,我需要打开它作为井!
答案 0 :(得分:68)
在使用前,请在路径上使用Environment.ExpandEnvironmentVariables
。
var pathWithEnv = @"%USERPROFILE%\AppData\Local\MyProg\settings.file";
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
using(ostream = new FileStream(filePath, FileMode.Open))
{
//...
}
答案 1 :(得分:5)
使用Environment.ExpandEnvironmentVariables
静态方法:
string fileName= Environment.ExpandEnvironmentVariables(fileName);
ostream = new FileStream(fileName, FileMode.Open);
答案 2 :(得分:5)
尝试在路径上使用ExpandEnvironmentVariables。
答案 3 :(得分:-1)
您也可以使用Environment.Username
常量。 %USERPROFILE%
和此环境变量都指向相同的(这是当前记录的用户)。但如果你选择这种方式,你必须自己连接路径。
答案 4 :(得分:-1)
我在我的实用工具库中使用它。
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“);”