一直认为博客是一种学习笔记,且与人交流经验、心得的平台,如若觉得文章能为各位看客解惑,也请留名一二,能使人藉此在计算机的海洋中页不觉孤独.
单单读写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