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的路径,我也需要打开它!
在使用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变量都指向相同的点(即当前登录的用户)。但如果你选择这种方式,你必须自己连接路径。