fstream文件流和vc调试

1.在编译调试一段代码的时候,遇到了死循环的问题,但是在程序还没有进入循环之前的断点都进不去,搞了好半天,最后把debug目录全部删除掉,问题就解决了。事后分析下原因:在调试的过程中,上一次的执行信息仍然还保留在调试文件里,导致当前断点无效,那在调试之前应该都编译了,为什么调试文件没有更新,有可能那个问题被其他进程使用所致。

 

2.fstream类对象可以打开一个同时被用于输入和输出的文件。

 

  1. fstream outFile(m_strDspPath.c_str());
  2.     if (!outFile)
  3.     {
  4.         return -1;// 打开文件失败
  5.     }
  6.     
  7.     string strBuff;// 保存文件的内容
  8.     if (m_vecCpp.empty() && m_vecHead.empty())
  9.     {
  10.         outFile.close();// 没有添加的文件
  11.         
  12.         return -2;
  13.     }
  14.     else
  15.     {
  16.         char buff[4096] = {0};
  17.         BOOL bCompletedCpp = FALSE;
  18.         BOOL bCompletedH = FALSE;
  19.         if (m_vecCpp.empty())
  20.         {
  21.             bCompletedCpp = TRUE;
  22.         }
  23.         if (m_vecHead.empty())
  24.         {
  25.             bCompletedH = TRUE;
  26.         }
  27.         outFile.seekg(0);
  28.         
  29.         while(!outFile.eof())
  30.         {
  31.             outFile.getline(buff, 512);
  32.             int huang = outFile.tellg();
  33.             
  34.             string strTmp = buff;
  35.             strBuff += strTmp;
  36.             strBuff += "/n";
  37.             if (!bCompletedCpp)
  38.             {
  39.                 int nIndex = strTmp.find("cpp;c;cxx;rc;def;r;odl;idl;hpj;bat");
  40.                 if (nIndex != string::npos)
  41.                 {
  42.                      if (!m_vecCpp.empty())
  43.                      {                       
  44.                          for (int i = 0; i < m_vecCpp.size(); i++)
  45.                          {
  46.                              strBuff += "# Begin Source File/n";
  47.                              strBuff += "/n";
  48.                              strBuff += "SOURCE=.//";
  49.                              strBuff += m_vecCpp[i];
  50.                              strBuff += "/n";
  51.                              strBuff += "# End Source File/n";
  52.                          }
  53.                      }
  54.                     
  55.                     bCompletedCpp = TRUE;
  56.                     continue;
  57.                 }
  58.             }
  59.             if (!bCompletedH)
  60.             {
  61.                 int nIndex = strTmp.find("h;hpp;hxx;hm;inl");
  62.                 if (nIndex != string::npos)
  63.                 {
  64.                     if (!m_vecHead.empty())
  65.                     {                       
  66.                         for (int i = 0; i < m_vecHead.size(); i++)
  67.                         {
  68.                             strBuff += "# Begin Source File/n";
  69.                             strBuff += "/n";
  70.                             strBuff += "SOURCE=.//";
  71.                             strBuff += m_vecHead[i];
  72.                             strBuff += "/n";
  73.                             strBuff += "# End Source File/n";
  74.                         }
  75.                     }
  76.                     bCompletedH = TRUE;
  77.                 }
  78.             }
  79.         }
  80.     }
  81.     outFile.clear();
  82.  
  83. // 在这里如果没有clear(),那么下面的代码会执行失败
  84.     if (!strBuff.empty())
  85.     {
  86.         outFile.seekp(0, ios::beg);
  87.         int  iPos= outFile.tellp();
  88.         
  89.         outFile << strBuff.c_str();
  90.         outFile.close();
  91.     }
  92.     
  93.     return 0;

每次执行int iPos = outFile.tellp()的值都是-1,同时也不能向文件输出数据;

在网上找了很多的资料,也没有找到原因,后来在《C++ Primer》上找到原因:

 

outFile处于“遇到文件结束符”的状态。只要它处于这种状态,就不能再执行输入和输出操作。解决方案是调用clear(),清除这种状态,就可以了!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值