对一个文件每次读取一行:
while (m_read.GetPosition() < m_read.GetLength())
{
m_read.ReadString(string);
if (string == "")
{
break;
}
if(string.Find("Err") != -1)
{
m_tmpfile.SeekToEnd();
m_tmpfile.WriteString(string);
m_tmpfile.WriteString("\n");
}

}
m_read 和m_tmpfile都是CStdioFile对象,现在的问题是,我使用m_read.ReadString读取一行时遇到一个问题,比如我要读取下面的文件:
0710 183623.636 Err 1104914752 SendSmsService-4096 >> SmsMessage.cpp:2907 virtual int SMPP::CSmppMessage::processWaitRespTimeOut(SMPP::CSmsTimeOut*)() >> [0x00002aaab9f02c40]Wait submit resp time out,simulate SR and erase this message from wait resp map.
destDOID = DOID://00000001/00000001/0000003D/0000003D
requestID = 61560710 183646.979 Inf 1077573952 DetectService-22 >> no more records
0710 183754.297 Inf 1096493376 Container >> Set timer successfully. timerID=2360198336, userTimerID=85, interval=3000, times=1, moduleID=12, MHID=12.第一次读取能够读到SMPP::CSmppMessage::processWaitRespTimeOut(SMPP::CSmsTimeOut*)() >> [0x00002aaab9f02c40]Wait submit resp time out,simulate SR and erase this message from wait resp map.但是第二次以后的读取都只能读到"map.",程序陷入死循环了,请教下这个是啥原因啊?还有个问题:如果文件的最后一行存在空行,GetPosition返回的值永远会小于GetLength返回的值,程序也跳不出来,有没有哪个命令能够删除文件中的空行?或者能够解决这个问题的?谢谢啦!

解决方案 »

  1.   


      while(m_read.ReadString(string))
      {  
        if(string.Find("Err") != -1)
        {
          m_tmpfile.SeekToEnd();
          m_tmpfile.WriteString(string);
          m_tmpfile.WriteString("\n");
        }
      }
      

  2.   

    看 MSDN 上的 CStdioFile::ReadString  的说明--------------------------------------------------------------------------------
    Return Value
    A pointer to the buffer containing the text data. NULL if end-of-file was reached without reading any data; or if boolean, FALSE if end-of-file was reached without reading any data.空行他也包含了 “回车换行” 字符,并非正真意义上的空, 所以ReadString也返回TRUE,下面的string.Find会返回-1,不影响任何逻辑关系。 所以答案就是行。
      

  3.   


    您好,
    由于您长时间不结贴,上一次答复已超一个月并且已有最佳答案,本人帮你结贴。
    若是觉得答案不嘉,请放在本版的疑难杂症帖链接:
    http://bbs.csdn.net/topics/390351579。
    如果您有什么意见,请您联系我。