wka*_*ada 12 .net c# environment environment-variables special-folders
我知道我可以读取这样的环境变量:
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Run Code Online (Sandbox Code Playgroud)
但是,如果我能做到这样的话,对我来说真的很有帮助:
Environment.ExpandEnvironmentVariables(@"%MyDocuments%\Foo");
Run Code Online (Sandbox Code Playgroud)
是否有一个等于SpecialFolder.MyDocuments的环境变量?
我也试图做这样的事情,但这不会导致预期的结果:
Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\My Documents\Foo");
Run Code Online (Sandbox Code Playgroud)
这样我就得到了类似@"C:\Users\<MyUser>\My Documents\Foo"但我需要的东西@"\\someservername\users$\<MyUser>\My Documents\Foo".
编辑:我的目标不是硬编码环境变量或之后的部分.
还有其他建议吗?
小智 11
没有MyDocuments特殊文件夹的环境变量(对于大多数SpecialFolder枚举成员也是如此).
看看这个片段,它可能正是您要搜索的内容.
它允许你做这样的事情:
string fullPath = SpecialFolder.ExpandVariables(@"%MyDocuments%\Foo");
Run Code Online (Sandbox Code Playgroud)
注意:SpecialFolder.ExpandVariables是上述代码段中引入的辅助类的静态方法.
是否存在等于的环境变量
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);
Run Code Online (Sandbox Code Playgroud)
另一种解决方案可能是在路径中使用"假"环境变量并自行扩展,例如:
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);
Run Code Online (Sandbox Code Playgroud)