MFC 实现轮流写两个文件

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



猜你喜欢

转载自blog.csdn.net/wangkui1331/article/details/80065540