新手问题:VC如何读写文件为Unicode及二进制

winlyf 2008-08-23 05:38:17
在EDIT控件上获取值 CString str;
如何将这个字符串保存成为Unicode的二进制文件?及读这个文件?
...全文
282 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2008-08-24
  • 打赏
  • 举报
回复
什么叫以二进制形式保存?你的文件名叫"login.txt",所以应该是一个文本文件.即可以用"notepad"打开的.
winlyf 2008-08-24
  • 打赏
  • 举报
回复
谢谢楼上的
现在保存的是UNICODE的了
m_UNICODE = TRUE;
CFile file;
file.Open(_T("D:\\TEXT\\login.txt"),CFile::modeCreate | CFile::modeWrite|CFile::typeBinary);
CArchive ar(&file, CArchive::store);
Serialize(ar);
ar.Close();
file.Close();

上面我写的代码,是不是以二进制形式保存?
schlafenhamster 2008-08-24
  • 打赏
  • 举报
回复
给个例子:
void CxxxxDoc::Serialize(CArchive& ar)
{
BOOL FirstLine=TRUE;
WCHAR wBuf[2048];
char szBuf[2048];
int i=0;
BOOL LineEnd=FALSE;
char type[10];
char dummy[10];
char *pLine=0;
char UniHead[4]={(char)0xEF,(char)0xBB,(char)0xBF,(char)0};//UNICODE
char UtfHead[3]={(char)0xFF,(char)0xFE,(char)0};//UTF8
//
memset(type,0,10);
memset(dummy,0,10);
//
if (ar.IsStoring())
{
// TODO: add storing code here
int all=m_TextArray.GetSize();
for (int kk=0;kk<all;kk++)
{
strcpy(szBuf,m_TextArray[kk].GetBuffer(2048));
strcat(szBuf,"\r\n");
if(FirstLine)
{
if(m_UTF8) ar.Write(UniHead,3);
else if(m_UNICODE) ar.Write(UtfHead,2);
}// end 1st line

if(m_UTF8)
{
MultiByteToWideChar(CP_ACP,0,szBuf,-1,wBuf,2048);
WideCharToMultiByte(CP_UTF8,0,wBuf,-1,szBuf,2048,0,0);
ar.Write(szBuf,strlen(szBuf));
}
if(m_UNICODE)
{
MultiByteToWideChar(CP_ACP,0,szBuf,-1,wBuf,2048);
ar.Write(wBuf,2*wcslen(wBuf));
}
else
{
ar.Write(szBuf,strlen(szBuf));
}
FirstLine=FALSE;
}// end for
}// end save
....
}
winlyf 2008-08-24
  • 打赏
  • 举报
回复
如果我不在工程中定义了_UNICODE和UNICODE,就不能保存为UNICODE么?
我想通过MultiByteToWideChar转换可以这样用么??

cnzdgs所说的在创建文件的时候先向文件写入0xff、0xfe两个字节,这个该怎么做?
也是使用write("0xff",2);这样的?

还请赐教。
jingzhongrong 2008-08-23
  • 打赏
  • 举报
回复
这样也可以,使用fopen打开文件后直接fwrite,fread就可以了。
_wfopen( L"_wfopen_test.xml",L"wt+,ccs=UNICODE"))
Cricketol 2008-08-23
  • 打赏
  • 举报
回复
楼上两位已经说得很清楚,我想说都没得说了
随便接个分
superdiablo 2008-08-23
  • 打赏
  • 举报
回复
只要你的工程中定义了_UNICODE和UNICODE,那么str中保存的就是UNICODE字符串,保存格式就是两个字节一个字符,字符数是str.GetLength,你只要把这个字符串写入文件即可,比如myfile.write((LPCTSTR)str, str.GetLength()*2);,读出也类似.如果你想保存成notepad可以打开的文件,则按照楼上说的文本格式保存即可.
cnzdgs 2008-08-23
  • 打赏
  • 举报
回复
Unicode文本文件以0xff、0xfe两个字节开头,后面是Unicode文本内容。在创建文件的时候先向文件写入0xff、0xfe两个字节,然后再写入Unicode字符串即可;在读文件的时候,先读出前两字节,然后将后面数据直接读入Unicode字符串缓冲区。至于二进制文件,直接把要写的数据写入文件即可。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧