在我的应用程序中,我创建了大小为5kb的日志文件。如果我的文件大小超过5 kb,我必须借助新内容覆盖旧内容。
如果您有任何想法,请与我分享。
我还需要在c ++中实现这种技术
我提供了一些例子
最初文件看起来像这样
sample.txt的
示例应用程序文本 样品
假设上面的示例文本文件超过5kb然后我在source.txt中添加 new ,那么文件应该是这样的。
sample.txt的
新的示例应用程序文本 SAM
此致 KARTHIK
答案 0 :(得分:5)
以下是我最近为实现简单的日志文件轮换而编写的一些代码:
std::ostream & libLogging::FileRotationLogSink::GetCurrentStream(
std::string::size_type required )
{
if ( static_cast<std::string::size_type>(m_CurrentStream.tellp( )) +
required > m_Limit ) {
m_CurrentStream.close();
// remove old backup
if ( boost::filesystem::exists( m_BackupPath ) ) {
boost::filesystem::remove( m_BackupPath );
}
// backup current logfile
boost::filesystem::rename( m_LogFilePath, m_BackupPath );
// open new logfile
m_CurrentStream.open( m_LogFilePath );
}
return m_CurrentStream;
}
required
给出要写入日志的下一条消息的大小。如果文件太大,则会复制(旧备份被覆盖),并启动一个新文件。
答案 1 :(得分:1)
使用WinApi,你应该
1)使用GetFileSize检查文件是否大于限制 2)SetFilePointer为0,0 + SetEndOfFile
答案 2 :(得分:1)
您可以计算插入日志的内容量,并检查每次是否超过5kb。使用如下函数:
void writeToLog(char c) {
if(writeIndex == 5000)
writeIndex =0;
log[writeIndex] = c;
writeIndex += 1;
}
确保你可以实现字符串写入功能。
答案 3 :(得分:0)
由于您使用的是MFC,因此可以使用CFile类进行文件管理。该类有一个GetLength方法,它返回文件的大小。
要覆盖旧内容,您可以管理代表文件内容的5000个字符的缓冲区。在每个文件写入时,您只需要替换文件内容。
答案 4 :(得分:0)
以下方法可行:
tellp
获取最后一个放置位置(以及到目前为止的文件大小)。seekp
开始流...... 答案 5 :(得分:0)
log4cxx是一个很好的解决方案,已经解决了这个问题,还有更多你可能还没有考虑过。