【问题标题】:.Net use of special folder notation.Net 使用特殊文件夹表示法
【发布时间】:2011-09-13 09:29:52
【问题描述】:

我希望能够做这样的事情:

IO.Directory.Exists("%USERPROFILE%")

原因是我想指定我的应用程序将使用的目录之一,作为配置文件中的纯文本。在某些情况下,我希望它嵌套在用户配置文件下,在这种情况下,配置文件的内容如下:

...
LocalDbDirectory = %USERPROFILE%\Application Data\My Toolkit\
...

或者我可能希望它位于网络位置,在这种情况下,它会显示如下内容:

...
LocalDbDirectory = N:\Common\My Toolkit Databases\
...

所以我需要能够使用 IO.Directory.Exists(...) 等方法或等效方法来解释速记符号。

有什么想法吗?

【问题讨论】:

  • 在 .NET 应用程序中依赖环境变量不是很安全,如果设置 USERPROFILE=~/,那么 System.IO.Directory.Exists(path) 将始终返回 false,但设置 USERPROFILE=。或设置 USERPROFILE=/ somtimes 可能会起作用,具体取决于当前的 worknig 文件夹

标签: .net windows special-folders


【解决方案1】:

您需要通过Environment.ExpandEnvironmentVariables(path); 运行它们,其中路径为@"%USERPROFILE%\Application Data\My Toolkit\"(对于不包含%% 格式化标记的路径,这样做没有害处)

【讨论】:

  • 这就是为什么 IO 命名空间下什么都没有然后翻白眼...谢谢!
【解决方案2】:

如果速记是有效的环境变量,你可以解析它们的值:

    static void Main(string[] args)
    {
        string val = Environment.ExpandEnvironmentVariables("%USERPROFILE%");
        Console.WriteLine(val);
        Console.Read();
    }

从 .NET 4 开始,特殊文件夹支持包括用户配置文件:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-06-05
    相关资源
    最近更新 更多