怎么实现日志的记录 程序是24小时运行的。程序需要写日志,要求是“每天记录一个文件”怎么实现“每天记录一个文件”。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你用日志生成的时间做文件名不就好了,要记得用年月日做文件名。然后写一个处理函数// 写每一条log前都要记录当时的时间LogEx(CTime time, CString strlog){ //最好记录下文件的时间 if()//通过文件名来比较Time的年月日 { //符合条件写入 } else { //通过文件句柄来关闭文件,新创建一个文件 if(m_hFile ...) { //做Close操作 } .//创建一个新的 }} 先获取当日日期,记录文件名是年_月_日。每次以创建模式打开文件,append写。这样每天只在第一次创建。第2天再写又是新文件。 如下函数实现每天一个调试日志文件,供参考:void WriteDebug(LPTSTR pszMess){#if WRITE_DEBUG CStdioFile File; TCHAR sz[1024]={0};//buf length! sprintf(sz, _T("%sSLog_%s.txt"), g_szRootPath, COleDateTime::GetCurrentTime().Format(_T("%y%m%d"))); if (!File.Open(sz, CFile::modeWrite | CFile::modeCreate| CFile::modeNoTruncate | CFile::typeText, 0)) { return ; } time_t tm; time(&tm); struct tm *p; p= localtime( &tm ); sprintf(sz, _T("[%02d-%02d-%02d %02d:%02d:%02d]%s\r\n"), p->tm_year%100,p->tm_mon+1,p->tm_mday, p->tm_hour,p->tm_min,p->tm_sec, pszMess); TRY { File.SeekToEnd(); File.WriteString(sz); File.Close(); } CATCH (CFileException, e) { return ; } END_CATCH#endif} void WriteToLog(LPTSTR lpInfo){ SYSTEMTIME systm; FILE *fLogBuf; GetLocalTime( &systm ); char cpFile[100]={0}; sprintf(cpFile,"Log%02d%02d.txt",systm.wMonth ,systm.wDay ); fLogBuf = fopen(cpFile,"a+"); if(fLogBuf == NULL ) { return; } fprintf(fLogBuf,"%02d:%02d:%02d:%03d ",systm.wHour,systm.wMinute,systm.wSecond,systm.wMilliseconds ); fprintf( fLogBuf,"Send[ASC]=%s\n",lpInfo); fclose(fLogBuf); return TRUE; void WriteToLog(LPTSTR lpInfo) { SYSTEMTIME systm; FILE *fLogBuf; GetLocalTime( &systm ); //得到当时的系统时间 char cpFile[100]={0}; sprintf(cpFile,"Log%02d%02d.txt",systm.wMonth ,systm.wDay ); //文件名,以天来区别 fLogBuf = fopen(cpFile,"a+"); if(fLogBuf == NULL ) { return; } fprintf(fLogBuf,"%02d:%02d:%02d:%03d ",systm.wHour,systm.wMinute,systm.wSecond,systm.wMilliseconds ); fprintf( fLogBuf,"s\n",lpInfo); //写入记录的日记信息 fclose(fLogBuf); return;} 如何才能让自己做的界面不被spy++侦测出来 非模态对话框进不了Onpaint 只使用内核API,如何将文件路径在\Device\HarddiskVolume? C:\两种格式间相互转换? 怎样给应用程序添加位图? 怎么得到SDI最小化的状态 请教高手,如何能调用另一进程里的某个函数? 如何在自定义结构中表示位? 吴炜:来取分(谢谢你) 控件的动态创建问题!!分不够还可以加 控件注册的实质是什么?难道仅仅是把*.OCX文件拷贝到系统文件夹吗? 内核 有没有Sleep相似的函数可用? 本周六(2009-5-2)19:30开始第二轮VC6免费课
LogEx(CTime time, CString strlog)
{
//最好记录下文件的时间
if()//通过文件名来比较Time的年月日
{
//符合条件写入
}
else
{
//通过文件句柄来关闭文件,新创建一个文件
if(m_hFile ...)
{
//做Close操作
}
.//创建一个新的
}
}
每次以创建模式打开文件,append写。
这样每天只在第一次创建。
第2天再写又是新文件。
void WriteDebug(LPTSTR pszMess)
{#if WRITE_DEBUG CStdioFile File;
TCHAR sz[1024]={0};//buf length!
sprintf(sz,
_T("%sSLog_%s.txt"),
g_szRootPath,
COleDateTime::GetCurrentTime().Format(_T("%y%m%d"))); if (!File.Open(sz, CFile::modeWrite | CFile::modeCreate|
CFile::modeNoTruncate | CFile::typeText, 0))
{
return ;
}
time_t tm;
time(&tm);
struct tm *p;
p= localtime( &tm );
sprintf(sz,
_T("[%02d-%02d-%02d %02d:%02d:%02d]%s\r\n"),
p->tm_year%100,p->tm_mon+1,p->tm_mday,
p->tm_hour,p->tm_min,p->tm_sec,
pszMess); TRY
{
File.SeekToEnd();
File.WriteString(sz);
File.Close(); }
CATCH (CFileException, e)
{
return ;
}
END_CATCH
#endif}
{
SYSTEMTIME systm;
FILE *fLogBuf;
GetLocalTime( &systm );
char cpFile[100]={0};
sprintf(cpFile,"Log%02d%02d.txt",systm.wMonth ,systm.wDay ); fLogBuf = fopen(cpFile,"a+");
if(fLogBuf == NULL )
{
return;
} fprintf(fLogBuf,"%02d:%02d:%02d:%03d ",systm.wHour,systm.wMinute,systm.wSecond,systm.wMilliseconds );
fprintf( fLogBuf,"Send[ASC]=%s\n",lpInfo); fclose(fLogBuf);
return TRUE;
{
SYSTEMTIME systm;
FILE *fLogBuf;
GetLocalTime( &systm ); //得到当时的系统时间 char cpFile[100]={0}; sprintf(cpFile,"Log%02d%02d.txt",systm.wMonth ,systm.wDay ); //文件名,以天来区别 fLogBuf = fopen(cpFile,"a+");
if(fLogBuf == NULL )
{
return;
} fprintf(fLogBuf,"%02d:%02d:%02d:%03d ",systm.wHour,systm.wMinute,systm.wSecond,systm.wMilliseconds );
fprintf( fLogBuf,"s\n",lpInfo); //写入记录的日记信息 fclose(fLogBuf);
return;
}