C# 从环境中获取本地化路径

Posted

技术标签:

【中文标题】C# 从环境中获取本地化路径【英文标题】:C# get localized Path from Environment 【发布时间】:2012-10-02 06:03:08 【问题描述】:

我有一个德语操作系统,我需要获取文件夹的路径。在 Windows 7 中,“文档”的显示名称为“Dokumente”。但如果我走这样的路

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

我得到C:\\Users\\Username\\Documents\\ 但我需要C:\\Benutzer\\Username\\Dokumente\\

知道如何获得本地化路径吗?

【问题讨论】:

***.com/questions/5145394/…的可能重复 答案是@Jcl 在他的评论中建议的地方。不过要小心你用这个(字符串)值做什么。它仅用于“显示目的”。例如,如果您尝试在那里写入文件,它要么会失败(因为它并不真正存在),要么(更糟糕的是,IMO)在磁盘上创建目录结构。 【参考方案1】:

也许:

[DllImport("shell32.dll")]
        static extern int SHGetFolderPath(
            IntPtr hwndOwner, 
            int nFolder, 
            IntPtr hToken,
            uint dwFlags, 
            [Out] StringBuilder pszPath
            );

    public static string GetLocalizedPath(Environment.SpecialFolder folder)
    
        var builder = new StringBuilder();
        SHGetFolderPath(IntPtr.Zero, (int)folder, IntPtr.Zero, 0x0000, builder);
        return builder.ToString();
    

【讨论】:

【参考方案2】:

您会发现它在您的系统上实际上被称为“文档”。 “Dokuments”路径实际上只显示在资源管理器中(此本地化名称在 desktop.ini 文件中引用)。所以Environment.GetFolderPath返回的路径其实是正确且可用的。您可以通过在您的个人资料目录中打开 cmd 并运行 dir /a 来查看“真实”姓名。

【讨论】:

我知道我从 Environment.GetFolderPath 获得的路径有效。但在这种情况下,我真的需要显示名称。 要获得显示的名称,您必须手动执行此操作。您必须将desktop.ini 解析为LocalizedResourceName,然后提取指定的字符串表资源。这是可行的,但确实需要实现一些 PInvoke 调用。

以上是关于C# 从环境中获取本地化路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中获取用户本地机器时区

c#怎么获取程序当前运行路径

Opensplice - 从本地参与者获取 C# 中的 nodeId

从 C# 中的 IP 获取本地网络上的机器 MAC 地址

无法从使用 Azure SAML SSO 配置的本地应用程序中的 C# 中的 Request.Params 获取 SAML 响应

如何从本地 SharePoint 2013 和 ADFS 获取 FedAuth Cookie