(文件拷贝)多字节与Unicode字节状态下 CString转换Char的方法

由于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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值