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

本文关键字:%userprofile% 开头 路径 文件 | 更新日期: 2023-09-27 18:29:47

我有一个简单的问题。我在用户目录中有一个文件的路径,它看起来像这样:

%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:''something的路径,我也需要打开它!

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

在使用Environment.ExpandEnvironmentVariables之前先在路径上使用它。

var pathWithEnv = @"%USERPROFILE%'AppData'Local'MyProg'settings.file";
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
using(ostream = new FileStream(filePath, FileMode.Open))
{
   //...
}

尝试在路径上使用ExpandEnvironmentVariables。

使用Environment.ExpandEnvironmentVariables静态方法:

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

我在实用程序库中使用它。

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

您也可以使用Environment.Username常量。%USERPROFILE%和该Environment变量都指向相同的点(即当前登录的用户)。但如果你选择这种方式,你必须自己连接路径。