由于CString是对象,WCHAR*是宽字符的缓存,提供两种方法
方法1. 建立外部WCHAR*的数组,然后将CString的内容复制到这个数组;
CString strOrg;
WCHAR buf[STR_LEN];
CStringW strWide = CT2CW(strOrg); // 将T字符转换成宽字符
wcscpy(buf, strWide);
方法2. 取得CString内部使用的缓存;
CStrin strOrg;
CStringW strWide = CT2CW(strOrg); // 将T字符转换成宽字符
WCHAR *buf = strWide.GetBuffer(STR_LEN); // 获取CString内部缓存,并保证缓存长度是STR_LEN
所谓T字符TCHAR是指,如果定义了UNICODE宏,则是WCHAR,如果定义了多字节宏,则是CHAR,然后通过CT2CW,可以不管项目是宽还是窄字符,都统一转换成宽字符。
CString 是按TCHAR进行处理的,CStringW是特定处理宽字符,这里没用的的CStringA是特定处理窄字符。
/UseMulti-Byte Character Set
char pFrom[255];
CString oldPath = _T("D:\\123\\111.json");
CString newPath = _T("D:\\456");
CStringW oldPath_W = CT2CW(oldPath);
CStringW newPath_W = CT2CW(newPath);
memset(pFrom,0,sizeof(pFrom));
Wchar2Char(oldPath_W.GetBuffer(255),pFrom);
// strcpy(pFrom,oldPath);
char pTo[255];
memset(pTo,0,sizeof(pTo));
Wchar2Char(newPath_W.GetBuffer(255),pTo);
// strcpy(pTo,newPath);
SHFILEOPSTRUCT sfo;
sfo.hwnd =NULL;
sfo.wFunc= FO_MOVE;
sfo.pFrom= pFrom;
sfo.pTo =pTo;
// sfo.fFlags=FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_FILESONLY;
sfo.fFlags= FOF_SILENT | FOF_FILESONLY;
SHFileOperation(&sfo);
/
/UseUnicode Character Set
char pFrom[255];
CString oldPath = _T("D:\\123\\111.json");
CString newPath = _T("D:\\456");
memset(pFrom,0,sizeof(pFrom));
Wchar2Char((LPWSTR)(LPCWSTR)oldPath,pFrom);
// strcpy(pFrom,oldPath);
char pTo[255];
memset(pTo,0,sizeof(pTo));
Wchar2Char((LPWSTR)(LPCWSTR)newPath,pTo);
// strcpy(pTo,newPath);
SHFILEOPSTRUCT sfo;
sfo.hwnd =NULL;
sfo.wFunc= FO_MOVE;
sfo.pFrom= pFrom;
sfo.pTo =pTo;
// sfo.fFlags=FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_FILESONLY;
sfo.fFlags= FOF_SILENT | FOF_FILESONLY;
SHFileOperation(&sfo);
/
void Wchar2Char(WCHAR* pSrc,char* pDes)
{
int nLen = wcslen(pSrc) + 1;
WideCharToMultiByte(CP_ACP,0,pSrc,nLen,pDes,2 * nLen,NULL,NULL);
}