1.在编译调试一段代码的时候,遇到了死循环的问题,但是在程序还没有进入循环之前的断点都进不去,搞了好半天,最后把debug目录全部删除掉,问题就解决了。事后分析下原因:在调试的过程中,上一次的执行信息仍然还保留在调试文件里,导致当前断点无效,那在调试之前应该都编译了,为什么调试文件没有更新,有可能那个问题被其他进程使用所致。
2.fstream类对象可以打开一个同时被用于输入和输出的文件。
- fstream outFile(m_strDspPath.c_str());
- if (!outFile)
- {
- return -1;// 打开文件失败
- }
- string strBuff;// 保存文件的内容
- if (m_vecCpp.empty() && m_vecHead.empty())
- {
- outFile.close();// 没有添加的文件
- return -2;
- }
- else
- {
- char buff[4096] = {0};
- BOOL bCompletedCpp = FALSE;
- BOOL bCompletedH = FALSE;
- if (m_vecCpp.empty())
- {
- bCompletedCpp = TRUE;
- }
- if (m_vecHead.empty())
- {
- bCompletedH = TRUE;
- }
- outFile.seekg(0);
- while(!outFile.eof())
- {
- outFile.getline(buff, 512);
- int huang = outFile.tellg();
- string strTmp = buff;
- strBuff += strTmp;
- strBuff += "/n";
- if (!bCompletedCpp)
- {
- int nIndex = strTmp.find("cpp;c;cxx;rc;def;r;odl;idl;hpj;bat");
- if (nIndex != string::npos)
- {
- if (!m_vecCpp.empty())
- {
- for (int i = 0; i < m_vecCpp.size(); i++)
- {
- strBuff += "# Begin Source File/n";
- strBuff += "/n";
- strBuff += "SOURCE=.//";
- strBuff += m_vecCpp[i];
- strBuff += "/n";
- strBuff += "# End Source File/n";
- }
- }
- bCompletedCpp = TRUE;
- continue;
- }
- }
- if (!bCompletedH)
- {
- int nIndex = strTmp.find("h;hpp;hxx;hm;inl");
- if (nIndex != string::npos)
- {
- if (!m_vecHead.empty())
- {
- for (int i = 0; i < m_vecHead.size(); i++)
- {
- strBuff += "# Begin Source File/n";
- strBuff += "/n";
- strBuff += "SOURCE=.//";
- strBuff += m_vecHead[i];
- strBuff += "/n";
- strBuff += "# End Source File/n";
- }
- }
- bCompletedH = TRUE;
- }
- }
- }
- }
- outFile.clear();
- // 在这里如果没有clear(),那么下面的代码会执行失败
- if (!strBuff.empty())
- {
- outFile.seekp(0, ios::beg);
- int iPos= outFile.tellp();
- outFile << strBuff.c_str();
- outFile.close();
- }
- return 0;
每次执行int iPos = outFile.tellp()的值都是-1,同时也不能向文件输出数据;
在网上找了很多的资料,也没有找到原因,后来在《C++ Primer》上找到原因:
outFile处于“遇到文件结束符”的状态。只要它处于这种状态,就不能再执行输入和输出操作。解决方案是调用clear(),清除这种状态,就可以了!