我有一个程序,需要经常将文本行写入日志文件。我希望限制日志文件中的行数为1000行。当我向文件写入行时,它应该正常地追加它们。一旦文件达到1000行,我想删除第一行,然后追加新行。是否有一种方法可以在不每次重写整个文件的情况下完成这个操作?
我有一个程序,需要经常将文本行写入日志文件。我希望限制日志文件中的行数为1000行。当我向文件写入行时,它应该正常地追加它们。一旦文件达到1000行,我想删除第一行,然后追加新行。是否有一种方法可以在不每次重写整个文件的情况下完成这个操作?
所有文件都必须对齐到FS簇大小。因此,没有办法删除第一行而不重写文件。您可以将一行追加到文件中,但无法删除第一行。
您可以轮流使用2个文件。 或者在内存中使用一些缓冲区并定期刷新它。
http://www.codeproject.com/Articles/584794/Simple-logger-for-Cplusplus
希望您会发现它们有用 :)当您只想使用一个文件,而且行的长度不是固定的时候,没有办法不重写整个文件。
根据您向文件添加内容的频率,我认为没有任何问题。大约1000行,每行100个字符,只有大约100kb,这并不太多。此外,您可以添加一些迟滞。
然而:
每当您想要记录日志时,您可以打开文件,读取您的写入索引,跳转到该位置,并编写固定宽度的日志条目。当您的索引达到上限时,只需将其设置回0。
然而,这样做有很多警告 - 首先是每个正确的日志条目(假设您在中间关闭文件)都需要打开、读取、查找、写入、查找、写入和关闭 - 找到您的索引,转到它,写入新条目,然后更新您的索引。您还有编写固定大小数据元素的固有问题。此外,人类读者将依赖于您的内容来知道文件的“开头”。大多数人期望“第1行”是第一行。
我更支持只有几个文件并且“滚动”它们,以便每个文件本身都是连贯的,但如果您只想要一个具有固定行数的文件,则循环缓冲区的想法可以起作用。