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

时间:2011-01-18 17:05:34

标签: c# .net environment-variables environment special-folders

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

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"

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

还有其他建议吗?

6 个答案:

答案 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