2012-10-02 40 views
0

我有一个德语操作系统,我需要获取文件夹的路径。在Windows 7中,“Documents”的显示名称是“Dokumente”。但是,如果我把喜欢C#从环境中获取本地化路径

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

的路径,我得到C:\\Users\\Username\\Documents\\ 但我需要C:\\Benutzer\\Username\\Dokumente\\

任何想法我如何能得到本地化的路径?

+3

http://stackoverflow.com/questions/5145394/how-to-get-the-actual-localized-folder-names – Jcl

+0

答案的可能的复制就是@Jcl建议在他的评论中。尽管如此,请注意你对这个(字符串)值做了什么。它仅用于“显示目的”。例如,如果您尝试在其中写入文件,它可能会失败(因为它不存在)或(更糟糕的是,IMO)在磁盘上创建目录结构。 –

回答

0

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

+0

我知道我从Environment.GetFolderPath得到的路径起作用。但在这种情况下,我真的需要显示名称。 – Tomtom

+0

要获得显示的名称,您必须手动执行此操作。您必须解析'LocalizedResourceName'的'desktop.ini',然后提取指定的String Table资源。这是可行的,但确实需要实施一些PInvoke调用。 – Dai

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(); 
    }