CArchive体会

第一次使用CFile和CArchive读取txt文件时,所遇到的问题:  直接读取一个已经存在的文件时,用CArchive::>>CString无法读取整行的字符串,所读取的字符串超过了一个整行,而且其中有空格及回车符等等。  当换用CArchive::ReadString(CString)时,读取的是乱码。


当面对这个问题时,我也很烦躁。


浏览了一些blog后,得到的信息如下:

①CArchive可以读取由CArchive写入的txt字符串

②CArchive读CString时,第一个字符会被处理为的长度而不是读一行

③貌似可以使用CStdioFile::ReadString来读取一行。


从txt中读取的字符,如果是多字节格式(MultiByte)的,读入CString后会形成乱码,需要用MultiByteToWideChar转换为宽字节(WideCode,Unicode)格式。


一个小例子:

CString对象str从File中读取了所有的字符(此处本想只读一行的,但没有实现掉),之后转为Unicode,最后用wcstok_s来分隔。

CFile file(dlg_open.GetPathName(), CFile::modeRead);
CArchive ar(&file,CArchive::load);
m_map = new Map;

CString  str;
ar.ReadString(str);

size_t nchars = MultiByteToWideChar(CP_ACP, 0, (LPSTR)(LPCTSTR)str, -1, 0, 0);
wchar_t * pUnicode;
pUnicode = new wchar_t[nchars + 1];
memset(pUnicode, 0, (nchars + 1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, (LPSTR)(LPCTSTR)str, -1, (LPWSTR)pUnicode, nchars);


wchar_t delim = _T('\n');
wchar_t *next_token1 = NULL;


wchar_t* p = wcstok_s(pUnicode, &delim, &next_token1);

while (p != 0)
{
p = wcstok_s(0, &delim, &next_token1);


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值