UNICODE的路径转换问题,大虾来看看
孙亖
领域专家: 前端开发技术领域 2005-12-27 11:31:17 char * GetFullPath(char * zFilename)
{
WCHAR *zWide;
int nByte;
char *zFull = NULL;
nByte = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0)*sizeof(WCHAR);
zWide = (WCHAR *) malloc( nByte*sizeof(zWide[0]) );
if( zWide==0 ){
return 0;
}
nByte = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWide, nByte);
if( nByte==0 ){
free(zWide);
zWide = 0;
}
if( zWide ){
WCHAR *zTemp, *zNotUsedW;
nByte = GetFullPathNameW(zWide, 0, 0, &zNotUsedW) + 1;
zTemp = (WCHAR *) malloc( nByte*sizeof(zTemp[0]) );
if( zTemp==0 ) return 0;
GetFullPathNameW(zWide, nByte, zTemp, &zNotUsedW);
free(zWide);
nByte = WideCharToMultiByte(CP_UTF8, 0, zTemp, -1, 0, 0, 0, 0);
zFull = (char *) malloc( nByte );
if( zFull==0 ){
return 0;
}
nByte = WideCharToMultiByte(CP_UTF8, 0, zTemp, -1, zFull, nByte,
0, 0);
if( nByte == 0 ){
free(zFull);
zFull = 0;
}
free(zTemp);
}
return zFull;
}
int main(int argc, char* argv[])
{
printf(GetFullPath("D:\\study\\中文\\data"));
return 0;
}
打印的结果应该是 D:\study\中文\data 但结果是 D:\study\data, 中文字符不在了,这段程序错在哪里了,大虾救命