关于ascii和unicode函数调用的困惑
struct fileName
{
char Fname[512];
fileName *pNext;
}; //用于保存文件名
fileName *pHead = NULL;
void FindPathFile(char *path)
{
WIN32_FIND_DATA FD;
ZeroMemory(&FD,sizeof(WIN32_FIND_DATA)); //清空
HANDLE Hand;
char FilePath[512];
ZeroMemory(FilePath,512);
fileName *p = new fileName;
ZeroMemory(p,sizeof(fileName));
fileName *pTemp = pHead = p;
strcpy(FilePath,path); //将路径复制给FilePath
if (FilePath[strlen(FilePath)-1] != '//') //判断最后是不是"/"
{
strcat(FilePath,"//*"); //要加/*才能浏览本文件夹,注意双引号与单引号
}
Hand = FindFirstFile(FilePath,&FD); //看MSDN
if (Hand == INVALID_HANDLE_VALUE)
{
return; //按照路径打开失败,则结束
}
else
while(1)
{
if (FindNextFile(Hand,&FD))
{
//创建链表保存文件名
strcpy(p->Fname,FD.cFileName);
p = new fileName;
ZeroMemory(p,sizeof(fileName));
pTemp->pNext = p;
pTemp = p;
//cout << FD.cFileName << endl;
}
else
break;
};
FindClose(Hand);
}
我程序现在是unicode编码方式 调用会报错
error C2664: “FindFirstFileW”: 不能将参数 1 从“char [512]”转换为“LPCWSTR”
然后我将FindFirstFile函数写成FindFirstFileA 然后报错
“FindFirstFileA”: 不能将参数 2 从“WIN32_FIND_DATA *”转换为“LPWIN32_FIND_DATAA”
我想的是为什么LPWIN32_FIND_DATAA不默认成为LPWIN32_FIND_DATA
难道让我把WIN32_FIND_DATA写成WIN32_FIND_DATAA
请各位前辈给解决方法
[解决办法]
把你所有操作串的函数,都是用UNICODE版本,
如:
char 换成 wchar_t 或者 TCHAR
strcpy, strcat也使用UNICODE版本,查MSDN。
等等。。