我想加一个日志文件,并且是一天一个,之前的要一直保存,也就是每天的日志文件名称是不一样的,代码:
logfilename.Format("%d年%d月%d日.txt",curtime.GetYear(),curtime.GetMonth(),curtime.GetMinute());
CFile logfile(logfilename,CFile::modeCreate|CFile::modeReadWrite);
 while(m_bRun)
{ curtime = CTime::GetCurrentTime();
  if(/*curtime.GetHour() == 0 && curtime.GetMinute() == 0 && */curtime.GetSecond() == 0)
  {
logfile.Close();
SetCurrentDirectory( "g:\\open\\log");   
  logfilename.Format("%d年%d月%d日.txt",curtime.GetYear(),curtime.GetMonth(),curtime.GetMinute());
  CFile logfile(logfilename,CFile::modeCreate|CFile::modeReadWrite);   
  }
  else
  {
  }
  logfile.Write(logfilename,logfilename.GetLength());
  logfile.Flush();

新建文件前要关闭昨天的文件,但是再重新建CFile对象logfile就会出错,可是每天建一个CFile对象的话循环怎么实现呢?原来的CFile对象能删除吗?或者是换个对象名,那样的话每天都不一样啊,循环该怎么设计呢??

解决方案 »

  1.   

    这个代码很成问题。
    CFile logfile(logfilename,CFile::modeCreate|CFile::modeReadWrite);  定义了两遍?
      

  2.   

    logfilename文件名是每天都变的
      

  3.   

    CTime curtime = CTime::GetCurrentTime();logfilename.Format("%d年%d月%d日.txt",curtime.GetYear(),curtime.GetMonth(),curtime.GetMinute());
    CFile logfile(logfilename,CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
    logfile.SeekToEnd();
    logfile.Write(...);
    logfile.Close();
    你这样用就行了,不需要非得循环,老实说,真有点看不懂你的代码
      

  4.   

    楼主你不要使用循环啊,
    /C++
    CFile file;
    CTime time = CTime::GetCurrentTime();
    CString strFile;
    strFile.Format(_T("%04d年%02d月%02d日.txt"), time.GetYear(), time.GetMonth(), time.GetDay()/*这边应该用GetDay*/);// modeCreate:文件不存在直接创建文件,如果存在则打开文件并将原文件清空
    // modeNoTruncate:与modeCreate组合使用,文件存在打开文件保留原文件数据
    // 对于以上两个OpenFlags可以参照MSDN解释
    // 这样同一天内,文件名是相同的,不会重复创建文件,数据也不会丢失。
    // 当过了一天时,因为文件名不同了,这样就生成了一个新文件。
    if (file.Open(strFile, CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate))
    {
    file.SeekToEnd(); // 写之前,将文件指针移到文件尾部,不会对之前记录的log有影响
    file.Write(str4Writing.GetBuffer(), str4Writing.GetLength());
    file.Flush();
    file.Close(); // 一次记录完,关闭文件,下次打开不会冲突
    }
    else
    {
    TRACE0("Failed to open file!\r\n");
    return FALSE;
    }
      

  5.   

    modeNoTruncate这个属性就是一直往同一个文件里写数据的,第二天的时候你再调用这个方法,就能创建第二天的日志了