开发工具: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下载