首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

txt文件读取和保存操作,该如何处理

2012-06-09 
txt文件读取和保存操作RTtxt文档编码格式为UTF8,以前只做过ANSI的,谁有这方面的例子或者链接告诉我一下呗

txt文件读取和保存操作
RT
txt文档编码格式为UTF8,以前只做过ANSI的,谁有这方面的例子或者链接告诉我一下呗
谢谢

[解决办法]
参考:

C/C++ code
// CEditStringDoc serializationvoid CEditStringDoc::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};    char    UtfHead[3]={(char)0xFF,(char)0xFE,(char)0};/*EF BB BF    UTF-8  FE FF     UTF-16/UCS-2, little endian  FF FE     UTF-16/UCS-2, big endian  FF FE 00 00  UTF-32/UCS-4, little endian.  00 00 FE FF  UTF-32/UCS-4, big-endian.*/    CFile *pFile=ar.GetFile();    CString name=pFile->GetFileTitle();//    if((name.Find(".htm")==-1) && (name.Find(".txt")==-1))    {            AfxMessageBox("Only suports *.htm or *.txt files!");        return;    }//    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    else    {// if UTF8 file the 1st 3 chars are: EFh,BBh,BFh     // if UNICODE file the 1st 2 chars are :FFh,FEh     // TODO: add loading code here        m_TextArray.RemoveAll();        memset(szBuf,0,sizeof(szBuf));        while(ar.Read(&szBuf[i],1))        {//            if(FirstLine)            {                if(    (szBuf[0]!=(char)0xEF) &&                     (szBuf[0]!=(char)0xBB) &&                    (szBuf[0]!=(char)0xBF) &&                    (szBuf[0]!=(char)0xFF) &&                    (szBuf[0]!=(char)0xFE) )                {// normal file                    m_UTF8=FALSE;                    m_UNICODE=FALSE;                    FirstLine=FALSE;                    i++;                    continue;                }                if(    szBuf[0]==(char)0xEF)                {                    type[0]=szBuf[0];                    continue;                }                if(    szBuf[0]==(char)0xBB)                {                    type[1]=szBuf[0];                        continue;                }                if(    szBuf[0]==(char)0xBF)                {                    type[2]=szBuf[0];                }// Is UTF8 file ?                if(    (type[0]==(char)0xEF) &&                     (type[1]==(char)0xBB) &&                        (type[2]==(char)0xBF)  )                {// UTF8 file                    m_UTF8=TRUE;                    m_UNICODE=FALSE;                    FirstLine=FALSE;                    continue;//i=0                }// Is UNICODE file ?                if(    szBuf[0]==(char)0xFF)                {                    type[0]=szBuf[0];                     continue;                }                if(    szBuf[0]==(char)0xFE)                {                    type[1]=szBuf[0];                    }                if(    (type[0]==(char)0xFF) &&                     (type[1]==(char)0xFE) )                    {                    m_UNICODE=TRUE;                    m_UTF8=FALSE;                    FirstLine=FALSE;                    continue;//i=0                }            }// end firstline// check line end            if(szBuf[i]==0x0D)            {//                 LineEnd=TRUE;                szBuf[i]=0;                ar.Read(dummy,1);//00 or 0a                 if(m_UNICODE)                {                    szBuf[i+1]=0;                    ar.Read(dummy,2);//0a 00                }            }//            if(LineEnd)            {                if(m_UTF8)                {// utf8 file                    MultiByteToWideChar(CP_UTF8,0,szBuf,-1,wBuf,2048);                    WideCharToMultiByte(CP_ACP,0,wBuf,-1,szBuf,2048,0,0);                    pLine=szBuf;                            }                else if(m_UNICODE)                {// Unicode file                    WideCharToMultiByte(CP_ACP,0,(WCHAR *)szBuf,-1,(char *)wBuf,2048,0,0);                    pLine=(char *)wBuf;                            }                else                {// normal file                    pLine=szBuf;                            }                LineEnd=FALSE;// new line                i=-1;// +1=0 szBuf[0]//add                 m_TextArray.Add(pLine);                memset(szBuf,0,sizeof(szBuf));            }// end LineEnd            i++;//from 0        }// end while// if file end but no LF        if(szBuf[0]!=0) m_TextArray.Add(szBuf);// last line          if(m_TextArray.GetSize()!=0)        {            UpdateAllViews(0);        }    }} 


[解决办法]
CFile file(L"C:\\utf8.txt",CFile::modeRead);
char *pBuf=new char[file.GetLength()+1];
file.Read(pBuf,file.GetLength());//读文件到字符串
pBuf[file.GetLength()]=0;//最后一位0结束
CString strTxt=CA2W(pBuf,CP_UTF8); 

[解决办法]
http://www.codeproject.com/Articles/4119/CStdioFile-derived-class-for-multibyte-and-Unicode
[解决办法]
fopen_s(&fp, "XXX.txt", "rw, ccs=UTF-8");
[解决办法]
或者干脆二进制读写,自写BOM
[解决办法]
指定UTF8的格式啊
[解决办法]
这里就是个字符编码问题。
将UTF8的Buffer转化一下就可以了
[解决办法]

探讨

CFile file(L"C:\\utf8.txt",CFile::modeRead);
char *pBuf=new char[file.GetLength()+1];
file.Read(pBuf,file.GetLength());//读文件到字符串
pBuf[file.GetLength()]=0;//最后一位0结束
CString strTxt=CA2W(pBuf,CP_UTF……

热点排行