如何从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);
最佳答案
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。这里有一个观点(见下文)认为这个案子可以忽略不计。
谢谢白痴,大家,为这篇文章所做的贡献。