展开“我的文档”的环境变量
我知道我可以读取这样的环境变量:
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
- VS2015 C#interactive:错误CS7069:引用类型’Object’声称它是在’System.Runtime’中定义的,但是找不到它
- 接口/抽象类编码标准
- SQLBulkCopy的任何方式“插入或更新,如果存在”?
- 用C#.NET调用Paypal自适应支付API? 最好使用WebServices
- C#。 如何以编程方式从控制台应用程序中选择和复制文本?
- C#在应用程序中获取.net控件的ScreenShot并附加到Outlook Email
- WinForms应用程序中的控制器/静态状态类 – 放在哪里?
- 从SQL Server读取十进制值时出现溢出exception
- 如何将标签的字体颜色设置为与GroupBox的标题颜色相同?