c#打开文件,以%userprofile%开头的路径

时间:2012-04-03 12:45:43

标签: c# file

我有一个简单的问题。我有一个用户目录中文件的路径,如下所示:

%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:\的东西,我需要打开它作为井!

5 个答案:

答案 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“);”