展开"我的文档"的环境变量

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是上述代码段中引入的辅助类的静态方法.

  • @HQSnippets那个片段消失了?事实上整个域名似乎消失了?http://www.whois.net/whois/hqsnippets.net (5认同)

Luc*_*cas 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);
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)