BOOL CsgiLog::SgiOut(const char *fmt, ...)
{
if(m_csFileName.IsEmpty())
return FALSE;
if(!m_bEnable)
return TRUE;
if (!AfxIsValidString(fmt, -1))
return FALSE;
try
{
va_list argptr; va_start(argptr,fmt); _vsnprintf(m_tBuff,tbuf_size,fmt,argptr); va_end(argptr); }
catch(...)
{
m_tBuff[0]=0;
}
BOOL bOK=FALSE;
lin1: FILE *fp = fopen(m_csFileName,"a");
if( ferror( fp )>=0 ) {
perror( "创建日志失败" ); } if(fp)
{
if(m_bPrintAppName)
{
fprintf(fp,"%s : ", m_csAppName); }
if(m_bPrintTime)
{
CTime ct;
ct=CTime::GetCurrentTime();
fprintf(fp,"%s : ",ct.Format("%m/%d/%Y %H:%m:%s")); }
fprintf(fp,"%s\n", m_tBuff);
//控制文件大小
CString szFile=m_csFileName;
int nFileSize=0,dd=6;
CFileFind finder;
CFile tt; if(finder.FindFile(szFile)){ finder.FindNextFile(); nFileSize = finder.GetLength(); //文件大小在这里
if (nFileSize >=dd)
{
// FILE *fpp = fopen("bac"+m_csFileName,"a");
fclose(fp);
tt.Remove("bactx.txt");
tt.Rename("e:\\log\\tx.txt","e:\\log\\bactx.txt");//能不能用变量取代?? goto lin1;
//FILE *fpp = fopen(m_csFileName,"a");
}; finder.Close(); }
这个代码是生成日志文件,然后判断日志文件的大小,如果文件大于规定的大小后,将文件改名,然后重新生成日志文件继续记录.
大家看看我的程序错在那里??高手帮忙!
{
if(m_csFileName.IsEmpty())
return FALSE;
if(!m_bEnable)
return TRUE;
if (!AfxIsValidString(fmt, -1))
return FALSE;
try
{
va_list argptr; va_start(argptr,fmt); _vsnprintf(m_tBuff,tbuf_size,fmt,argptr); va_end(argptr); }
catch(...)
{
m_tBuff[0]=0;
}
BOOL bOK=FALSE;
lin1: FILE *fp = fopen(m_csFileName,"a");
if( ferror( fp )>=0 ) {
perror( "创建日志失败" ); } if(fp)
{
if(m_bPrintAppName)
{
fprintf(fp,"%s : ", m_csAppName); }
if(m_bPrintTime)
{
CTime ct;
ct=CTime::GetCurrentTime();
fprintf(fp,"%s : ",ct.Format("%m/%d/%Y %H:%m:%s")); }
fprintf(fp,"%s\n", m_tBuff);
//控制文件大小
CString szFile=m_csFileName;
int nFileSize=0,dd=6;
CFileFind finder;
CFile tt; if(finder.FindFile(szFile)){ finder.FindNextFile(); nFileSize = finder.GetLength(); //文件大小在这里
if (nFileSize >=dd)
{
// FILE *fpp = fopen("bac"+m_csFileName,"a");
fclose(fp);
tt.Remove("bactx.txt");
tt.Rename("e:\\log\\tx.txt","e:\\log\\bactx.txt");//能不能用变量取代?? goto lin1;
//FILE *fpp = fopen(m_csFileName,"a");
}; finder.Close(); }
这个代码是生成日志文件,然后判断日志文件的大小,如果文件大于规定的大小后,将文件改名,然后重新生成日志文件继续记录.
大家看看我的程序错在那里??高手帮忙!
return TRUE;
这句是什么意思呢?如果不是Enable就返回TRUE?
另外你的这些
CFileFind finder;
CFile tt; if(finder.FindFile(szFile)){ finder.FindNextFile(); nFileSize = finder.GetLength(); //文件大小在这里
if (nFileSize >=dd)
{
// FILE *fpp = fopen("bac"+m_csFileName,"a");
fclose(fp);----------------------------------->没有打开文件怎么要关闭?
tt.Remove("bactx.txt");--------直接用CFile::Remove()
tt.Rename("e:\\log\\tx.txt","e:\\log\\bactx.txt");//能不能用变量取代??-----------------------直接用CFile::Rename()效率很低下呢,那个CFileFind 我的经验是比较难用的,尤其是你只有一个文件需要查找的时候。你要判断文件的大小可以使用下面的方法:
CFileStatus fStatus;
LONG lLength;
if (CFile::GetStatus(FileName, fStatus))
{
lLength = fStatus.m_size;
}
else
{
lLength=-1;//表明FileName指定的文件是不存在的
}