用c ++截断文件

2 c++ file-io logging file filestream

我正在用C++编写一个程序,并想知道是否有人可以帮助我解决这里解释的情况.

  1. 假设,我有一个大约30MB的日志文件,我已经将最后2MB的文件复制到程序中的缓冲区.

  2. 我删除文件(或清除内容),然后将我的2MB写回文件.

一切都很好,直到这里.但是,关注的是我读取文件(最后2MB)并清除文件(30MB文件)然后写回最后2MB.如果在我从1GB文件复制最后300MB文件的情况下,将需要大部分时间.

有没有人想过让这个过程更简单?

拥有大型日志文件时,应考虑以下原因.

磁盘空间:日志文件是未压缩的纯文本,占用大量空间.典型压缩会将文件大小减小10:1.但是,文件在使用(锁定)时无法压缩.因此必须将日志文件轮换不使用.

系统资源:定期打开和关闭文件会占用大量系统资源,这会降低服务器的性能.

文件大小:小文件在发生故障时更容易备份和恢复.

我只是不想复制,清除并重新写入文件的最后一行.只是一个更简单的过程...... :-)

编辑:没有任何内部进程来支持日志轮换. logrotate是工具.

Chr*_*lor 5

我建议采用略有不同的方法.

  1. 创建一个新的临时文件
  2. 将所需数据从原始文件复制到临时文件
  3. 关闭这两个文件
  4. 删除原始文件
  5. 将临时文件重命名为与原始文件相同的名称

为了提高副本的性能,您可以以块的形式复制数据,您可以使用块大小来查找最佳值.