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

单单读写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,那样会有小黑块.