开发工具:vs2010
实现功能:用MFC实现轮流写2个文件,当一个文件超过500k,会清空另一个文件并重新写,支持软件下次启动时,从上次写的文件继续写,加入了锁支持线程安全
部分参考代码:
void CLog::WriteLog( const char *pTemp ) { if (g_strLogFile[0].IsEmpty()) { CString strPath = GetModuleFullPath(); CString strLogDir = strPath + LOG_DIR; if(!PathFileExists(strLogDir)) { CreateDirectory(strLogDir, NULL); } g_strLogFile[0] = strLogDir + LOG_FILE0; g_strLogFile[1] = strLogDir + LOG_FILE1; } CAutoLock cAuto(&g_tSemaphore); CFile cfile; //打开 static int nFileIndex = 0; if (!PathFileExists(g_strLogFile[nFileIndex])) { BOOL bFlag = cfile.Open(g_strLogFile[nFileIndex], CFile::modeCreate | CFile::modeWrite); if (!bFlag) { return; } } else { CFileStatus fileStaus; if (CFile::GetStatus(g_strLogFile[nFileIndex], fileStaus)) { UINT nOpenFlag = 0; if (fileStaus.m_size > LOG_SIZE) { //文件0满,写文件1;文件1满,写文件 if ( 1 == nFileIndex ) { nFileIndex = 0; } else { nFileIndex = 1; } if (!PathFileExists(g_strLogFile[nFileIndex])) { nOpenFlag = CFile::modeCreate | CFile::modeWrite; } else { if (CFile::GetStatus(g_strLogFile[nFileIndex], fileStaus)) { //满就清空,不满就继续写 if (fileStaus.m_size > LOG_SIZE) { nOpenFlag = CFile::modeCreate | CFile::modeWrite; } else { nOpenFlag = CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate; } } } } else { nOpenFlag = CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate; } BOOL bFlag = cfile.Open(g_strLogFile[nFileIndex], nOpenFlag); if (!bFlag) { return; } } } // if (cfile.m_hFile != CFile::hFileNull) { cfile.SeekToEnd(); cfile.Write(pTemp, strlen(pTemp)+1); cfile.Close(); } }
具体代码下载路径: Demo下载