TCHAR szFileName[MAX_PATH];
//取得exe文件全路径名
GetModuleFileName(NULL, szFileName, sizeof(szFileName));
TCHAR szDrive[_MAX_DRIVE], szDir[_MAX_DIR];
//从szFileName路径中分离出驱动盘符和路径
_splitpath(szFileName, szDrive, szDir, NULL, NULL);
//用szDrive, szDir和Param.txt合成Param.txt的全路径名
_makepath(szFileName, szDrive, szDir, _T("Paramfirst"), _T(".txt"));//从Param.txt文件中读取参数
CStdioFile ParamFile;
CString strOneLine;int j=0
if(ParamFile.Open(szFileName, CFile::modeWrite | CFile::modeCreate))
{
    for(int i=0;i<100;i++)  //实际的这个for循环要运行很长时间,也可能在for循环里已经死机了
    {
        strOneLine.Format("%d\n",j);   
        ParamFile.WriteString(strOneLine);
    }
    j++;
}
ParamFile.Close(); 上面那样写程序的话,如果我在for循环还没结束就关闭程序或者for循环里死机了,导致Paramfirst.txt文件没有一行数据
我用下面的方法,导致最后只有一行数据
for(int i=0;i<100;i++)   //在实际环境下,这个循环要很久,所以我想一行一行实时输出数据
{
     if(ParamFile.Open(szFileName, CFile::modeWrite | CFile::modeCreate))
     {
strOneLine.Format("%d\n",j);
ParamFile.WriteString(strOneLine);
j++;
     }
     ParamFile.Close(); 
}我该怎样解决啊,有什么更好的办法吗?

解决方案 »

  1.   

    在for循环中加入中断事件的等待,从而响应立即关闭
      

  2.   

    CFile::modeCreate   Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length.所以最后只有一行数据,去掉这个,并在每次写入文件之前加上ParamFile.SeekToEnd();
      

  3.   

    int j=0
    if(ParamFile.Open(szFileName, CFile::modeWrite | CFile::modeCreate))
    {
        for(int i=0;i<100;i++)  //实际的这个for循环要运行很长时间,也可能在for循环里已经死机了
        {
            strOneLine.Format("%d\n",j);   
            ParamFile.WriteString(strOneLine);
            ParamFile.Flush();  //  Add
        }
        j++;
    }
    ParamFile.Close();
      

  4.   

    if(ParamFile.Open(szFileName, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate ))