MFC 实现轮流写两个文件

本文介绍了一个使用MFC实现的双文件轮转日志系统,当单个文件大小超过500KB时,系统会自动切换到另一个文件进行记录,并支持断点续写及线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin--你不知道的事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值