【问题标题】:How to write logs to files of size 64KB in C++/VC++?如何在 C++/VC++ 中将日志写入大小为 64KB 的文件?
【发布时间】:2009-10-12 10:49:45
【问题描述】:

如何将日志写入大小为 64KB 的文件(以允许记事本读取)。一旦文件达到 64KB,它应该开始创建另一个,另一个...... 文件名可以自动生成。

我尝试了以下代码

static int iCounter=1;
CString temp;
      static CStdioFile f(L"c:\\Log1.txt", CFile::modeWrite | CFile::modeRead |  CFile::modeCreate | CFile::modeNoTruncate);

 int nlength = (int)f.GetLength();
 if(nlength>(nMaxFileSize*1024))
 {
     //need to create a new file
     f.Close();
     iCounter++;
     temp.Format(_T("%s%d%s"), "c:\\Log",iCounter, ".txt");
     f.Open(temp,CFile::modeWrite | CFile::modeRead | CFile::modeCreate | CFile::modeNoTruncate);

 }
 f.SeekToEnd();
 f.WriteString(str);
 f.WriteString(L"\r\n");

我正在寻找更好的选择。

【问题讨论】:

  • 我正在尝试使用 GetLength() 函数来获取磁盘上的文件大小以寻找更好的替代方案。
  • 您是从哪里得出 64KB 限制的?我一直使用记事本打开更大的文件。这是一个蹩脚的文本编辑器,但打开几 MB 大的文件应该没有问题。或者,更好的是,开始使用许多可用的免费编辑器之一,它比记事本好得多。
  • 尝试测量字符串的长度,而不是文件的长度,或者在刷新后测量 - 您的某些更改不会写入文件。 @eran 非常正确,notepad++ 是我的选择,但还有很多其他的存在。
  • @eran - 但在某些时候你可能想要限制你的日志文件大小 - 如果不是 64KB,那么可能是几百 MB 或 2GB。不管是同一个问题,只是频率不同。

标签: c++ logging file-io visual-c++


【解决方案1】:

编写一个接受日志字符串的包装类,将它们写入当前日志文件并保留一个总字符串长度计数器。

当它达到您的阈值时,关闭当前日志文件,创建一个新文件,然后重置您的计数器。

您可以使用编号名称方案,例如log00001.txt, log 00002.txt, ...

【讨论】:

  • 有时解决方案就是这么简单:)
【解决方案2】:

使用 log4cplus 当然可以处理它 - 正确配置。

http://log4cplus.sourceforge.net/

【讨论】:

  • 我在哪里可以找到有关登录文件的文档?
  • codeproject.com/KB/cpp/Log4cplus.aspx 这可能会完成这项工作,然后搜索“log4cplus 日志轮换” - 你会发现很多有用的东西。
猜你喜欢
  • 2013-12-09
  • 2012-08-01
  • 1970-01-01
  • 2022-12-29
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多