如何将Unicode路径转换为c字符串?

时间:2010-06-01 17:11:16

标签: c winapi

如何从Unicode路径名(LPWSTR)转换为ASCII等价物?被调用的库只能理解c字符串。

编辑: 好的,我接受了GetShortPathName和WideCharToMultiByte建议并创建了这段代码,我在路径中使用包含Unicode字符的一些文件夹对其进行了测试,并且它运行良好:

wlength = GetShortPathNameW(cpy,0,0);
LPWSTR shortp = (LPWSTR)calloc(wlength,sizeof(WCHAR));
GetShortPathNameW(cpy,shortp,wlength);
clength = WideCharToMultiByte(CP_OEMCP, WC_NO_BEST_FIT_CHARS, shortp, wlength, 0, 0, 0, 0);
LPSTR cpath = (LPSTR)calloc(clength,sizeof(CHAR));
WideCharToMultiByte(CP_OEMCP, WC_NO_BEST_FIT_CHARS, shortp, wlength, cpath, clength, 0, 0);

1 个答案:

答案 0 :(得分:5)

GetShortPathName()功能

http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

将为您提供等效的8.3文件名,指向同一文件,以便与遗留代码一起使用。

[编辑]这可能是你能做的最好的,虽然理论上8.3文件名可能包含非ascii字符,具体取决于注册表设置。在这种情况下,您没有获得正确char *的简单方法,如果文件创建期间的代码页设置与当前设置不匹配,GetShortPathNameA()将不会这样做。

有关设置,请参阅http://technet.microsoft.com/en-us/library/cc781607%28WS.10%29.aspx。这里有一个共识(见下文),这个案例可以忽略不计。

感谢Moron,All,为这篇文章做出贡献。