您的位置:首页 > 其它

MFC读写txt文件

2012-09-27 00:43 357 查看
一直认为博客是一种学习笔记,且与人交流经验、心得的平台,如若觉得文章能为各位看客解惑,也请留名一二,能使人藉此在计算机的海洋中页不觉孤独.

单单读写txt文件的话,方法很多,包括C++中fiostream以及MFC封装的CFile,CStdioFile等类.这里就列出按行读取txt的2中较实用的方法:

1.流

FILE *stream;

char line[255];

if( (stream = fopen( "aa.txt ", "r " )) != NULL )

{

while (!feof(stream))

{

char *ch = fgets( line, 1024, stream );

//数据处理

if (ch == NULL) break;

}

}

fclose( stream );

2.MFC CStioFile类与CFile类,若想按行读取,每行分别处理,无疑使用CStioFile是方便的

CStdioFile myFile;

CString strPathListIterm;

CStringArray arrPathList;

if(myFile.Open(lpszPath,CFile::modeRead) == NULL)

return FALSE;

else

{

setlocale( LC_CTYPE, ("chs")); //解决CStdioFile-unicode乱码

pThis->m_BufferSize = myFile.GetLength();

while(myFile.ReadString(strPathListIterm)) //读入缓冲字符串

{

pThis->arrPathList.Add(strPathListIterm); //加入字符串数组

}

}

myFile.Close();

注意:CStdioFile类对Unicode字符编码支持不太好,需要我们手动解决!

补充:解决乱码问题还需还原区域设定才行:

char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) ); //记住原来的语言区域设定

setlocale( LC_CTYPE, ("zh_TW.UTF-8")); //解决CStdioFile-unicode乱码

...XXXXXXXXXXXXXXXXX...

setlocale( LC_CTYPE, old_locale ); //还原语言区域的设置

free( old_locale );

写文件比读文件更加简单:

CStdioFile myFile;

CString strWriteItem;

if(myFile.Open(pThis->m_strSzPath,CFile::modeReadWrite|CFile::modeCreate) == NULL)

return FALSE;

else

{

int nCount = arrPathList.GetSize();

for (int i = 0; i < nCount; ++i)

{

strWriteItem = (arrPathList[i]) +_T("\n");

myFile.WriteString(strWriteItem); //将缓冲区写入文件

}

}

myFile.Close();

注意:若想在txt中换行显示,那么必须加上\n,不要\r\n,也不是\r,那样会有小黑块.
本文出自 “马踏星空” 博客,请务必保留此出处http://moomlight.blog.51cto.com/2654869/1007735
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: