展开“我的文档”的环境变量

我知道我可以读取这样的环境变量:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

但是,如果我可以做这样的事情,对我来说真的很有帮助:

 Environment.ExpandEnvironmentVariables(@"%MyDocuments%\Foo"); 

是否有一个等于SpecialFolder.MyDocuments的环境变量?

我也尝试过这样的事情,但这不会导致预期的结果:

 Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\My Documents\Foo"); 

这样我就得到了像@"C:\Users\\My Documents\Foo"这样的东西,但我需要的是@"\\someservername\users$\\My Documents\Foo"

编辑:我的目标不是硬编码环境变量或之后的部分。

还有其他建议吗?

没有MyDocuments特殊文件夹的环境变量(对于SpecialFolder枚举的大多数成员也是如此)。

看看这个片段 ,它可能正是您要搜索的内容。

它允许你做这样的事情:

 string fullPath = SpecialFolder.ExpandVariables(@"%MyDocuments%\Foo"); 

注意:SpecialFolder.ExpandVariables是上述代码段中引入的辅助类的静态方法。

是否有一个等于SpecialFolder.MyDocuments的环境变量?

简答:没有

答案很长:
仍然没有。 您可以在命令提示符中键入"set"以查看所有当前环境变量。 我在我的个人资料中找不到任何我的文档文件夹(在WinXP和Win7上试过)。

此外,扩展"%USERPROFILE%\My Documents"将是不正确的,因为用户的文档文件夹可能在其他任何地方(例如,在我的家用PC上我总是将我的D:\Documents改为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); 

我不确定是否有一个好方法可以做到这一点,而不是尝试进行环境扩展以获取路径为什么不使用Path.Combine API?

 Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Foo"); 

你究竟想做什么? 你有什么理由不能只使用Path.Combine吗?

 string docs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string foo = Path.Combine(docs, "Foo"); 

您可以使用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); 

不,它不存在。 最简单的检查方法是从命令行运行“set”并查看自己。

 Start-> run -> cmd set set |findstr /i documents