前提:VS2010 ,MFC ,文本文件为ANSI格式。
读文件:
- CString str,fileContent;
- CStdioFile myFile, File;
- if(myFile.Open(GeneralUtils::GetModuleDir()+_T(\\mx.txt), CFile::modeRead))
- {
- //读取
- while(myFile.ReadString(str))
- {
- str = str + _T("\n");
- ReadStringCharToUnicode(str);
- fileContent = fileContent + str;
- }
- myFile.Close();
- }
写文件:
*.h
#include
*.cpp
- setlocale(LC_CTYPE,"chs");
- myFile.Open(GeneralUtils::GetModuleDir()+_T(\\mx2.txt), CFile::modeWrite | CFile::modeCreate);
- myFile.WriteString(fileContent);
- myFile.Close();
方法
- void ReadStringCharToUnicode(CString &str)
- {
- char *szBuf = new char[str.GetLength() + 1];//注意“+1”,char字符要求结束符,而CString没有
- memset(szBuf, '\0',str.GetLength());
-
- int i;
- for ( i = 0 ; i < str.GetLength(); i++)
- {
- szBuf[i] = (char)str.GetAt(i);
- }
- szBuf[i] = '\0';//结束符。否则会在末尾产生乱码。
-
- int nLen;
- WCHAR *ptch;
- CString strOut;
- if(szBuf == NULL)
- {
- return ;
- }
- nLen = MultiByteToWideChar(CP_ACP, 0, szBuf, -1, NULL, 0);//获得需要的宽字符字节数
- ptch = new WCHAR[nLen];
- memset(ptch, '\0', nLen);
- MultiByteToWideChar(CP_ACP, 0, szBuf, -1, ptch, nLen);
- str.Format(_T("%s"), ptch);
-
- if(NULL != ptch)
- delete [] ptch;
- ptch = NULL;
-
- if(NULL != szBuf)
- delete []szBuf;
- szBuf = NULL;
- return ;
- }
-