我们的应用程序在运行时调用ShGetFolderPath来获取“我的文档”文件夹。这通常很有效。但是,对于三个用户 - Дмитрий,Jörg和Jörgen(看看你是否可以发现模式!) - 该调用会返回一些非常奇怪的结果。例如,对于Дмитрий,调用返回:
c:\Users\???????\Documents
我假设有一些字符编码shenanigan在这里,可能与Unicode有关,但我没有任何相关的经验。如何从窗口中获取文件夹(和其他相关文件夹)的有用路径,而无需通过注册表项来查看信息?
在发给我的电子邮件中,Дмитрий(“德米特里”)告诉我他的“我的文件”文件夹实际上就在这里:
C:\Users\43D6~1\Documents
所以我知道有一种方法可以从Windows中获得“正常”版本的路径,我只是不知道它是什么。
背景:我们的应用程序不支持unicode,并使用标准的“char *”字符串。我们怎样才能获得“正常”的路径?我不反对调用函数的“unicode”版本,然后将其转换为“普通”文本,如果可能的话。完全将应用程序转换为使用unicode不是一种选择(我们没有时间)。
感谢。
答案 0 :(得分:5)
继续使用Unicode获取文件路径。然后调用GetShortPathNameW转换为短路径名组件。输出不应包含ASCII范围之外的任何字符,即使它是Unicode函数。然后,您可以将每个Unicode字符截断回8位以创建char
字符串。
答案 1 :(得分:2)
我不反对调用该函数的“unicode”版本,然后将其转换为“普通”文本,如果可能的话。
如果您将对SHGetFolderPath
的呼叫更改为SHGetFolderPathW
,它将为您提供类型为LPWSTR
的字符串,这是一个Unicode字符串。从那里,您可以将该字符串与以W
结尾的各种Unicode函数一起使用,以访问所需的文件夹。