我知道我可以读取这样的环境变量:
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
但是,如果我可以这样做,那对我来说真的很有帮助:
Environment.ExpandEnvironmentVariables(@"%MyDocuments%\Foo");
是否有一个等于SpecialFolder.MyDocuments的环境变量?
我也尝试过这样的事情,但这不会导致预期的结果:
Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\My Documents\Foo");
这样我就得到了类似@"C:\Users\<MyUser>\My Documents\Foo"
的内容,但我需要的是@"\\someservername\users$\<MyUser>\My Documents\Foo"
。
编辑:我的目标不是硬编码环境变量,也不是之后的部分。
还有其他建议吗?
答案 0 :(得分:11)
MyDocuments
特殊文件夹没有环境变量(SpecialFolder
枚举的大多数成员都是如此)。
查看this snippet,它可能正是您要搜索的内容。
它允许你做这样的事情:
string fullPath = SpecialFolder.ExpandVariables(@"%MyDocuments%\Foo");
注意:SpecialFolder.ExpandVariables是上述代码段中引入的辅助类的静态方法。
答案 1 :(得分:7)
是否有一个等于
SpecialFolder.MyDocuments
的环境变量?
简短回答:否。
答案很长:
仍然没有。您可以在命令提示符中键入"set"
以查看所有当前环境变量。我在我的个人资料中找不到任何我的文档文件夹(在WinXP和Win7上试过)。
此外,展开"%USERPROFILE%\My Documents"
会不正确,因为用户的文档文件夹可能位于其他任何位置(例如,在我的家用PC上,我总是将我的文件夹改为D:\Documents
)。
如果确实需要使用环境变量,一个解决方案可能是自己设置变量:
// this environment variable is created for the current process only
string documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Environment.SetEnvironmentVariable("MYDOCUMENTS", documents);
另一种解决方案可能是在路径中使用“假”环境变量并自行扩展,例如:
string path = "%MYDOCUMENTS%\\Foo"; // read from config
// expand real env. vars
string expandedPath1 = Environment.ExpandEnvironmentVariables(path);
// expand our "fake" env. var
string documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string expandedPath2 = path.Replace("%MYDOCUMENTS%", documents);
答案 2 :(得分:1)
我不确定是否有一种很好的方法可以做到这一点,而不是尝试进行环境扩展以获取路径,而不是使用Path.Combine
API?
Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
"Foo");
答案 3 :(得分:1)
你到底想要做什么?你有什么理由不能使用Path.Combine
吗?
string docs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string foo = Path.Combine(docs, "Foo");
答案 4 :(得分:1)
您可以使用Environment.GetEnvironmentVariable
方法扩展环境变量。鉴于您的评论,我建议您将您的路径分成两个单独的配置设置,以便更容易扩展:
string variablePath = "%appdata%".Trim('%'); //read from some config setting
string appdataPath = Environment.GetEnvironmentVariable(variablePath);
string subdir = "foo"; //some other config setting
string myDir = Path.Combine(appdataPath, subdir);
答案 5 :(得分:1)
不,它不存在。最简单的检查方法是从命令行运行“set”并查看自己。
Start-> run -> cmd
set
set |findstr /i documents