C从文本文件中删除第一行而不重写文件

时间:2010-04-17 12:41:40

标签: c file-io

我有一个一直运行的服务,并且还保存一个日志文件。它基本上每隔几秒就会在日志文件中添加新行。我写了一个小文件,它读取这些行,然后将它们解析为各种动作。我的问题是如何在不中断服务写入日志文件的情况下删除已经从日志文件中解析的行?

通常当我需要删除文件中的一行时,我打开原来的一行和一个临时的行然后我只是将所有行写入临时文件,除了我要删除的原始文件。显然这种方法不会在这里说。

那我该如何删除呢?

5 个答案:

答案 0 :(得分:6)

在大多数常用文件系统中,如果不重写整个文件,则无法从文件开头删除一行。我建议使用大量小文件而不是一个大文件,例如每天旋转一次。当您不再需要旧文件时,将删除旧文件。

答案 1 :(得分:2)

不幸的是,如果没有重写文件,无论是就地还是作为单独的文件,都无法完成。

想要查看的一件事是在另一个文件中维护一个指针,指定第一个未处理行的位置。

然后你的进程只是打开文件并寻找那个位置,处理一些行,然后更新指针。

你仍然需要在某些时候滚动文件,以免它们继续永远增长。

答案 2 :(得分:0)

我不确定,但我这样想: New Line是一个char,因此您必须删除该行的字符+ New Line char 顺便说一句,“移动”所有字符(覆盖旧行),就像复制不同位置的每个字符,并将它们从旧位置移除

所以不,我认为你不能删除一行,你应该重写所有文件。

答案 3 :(得分:0)

你不能,这不是文件的工作方式。

听起来你需要一些你的程序可以连接到的消息记录服务/库来记录消息,然后可以隐藏文件打开/关闭等的基本细节。

答案 4 :(得分:0)

如果每个日志行都有唯一的标识符(甚至只是行号),您只需在日志中存储解析标识符即可解析。这样您就不必更改日志文件中的任何内容。

如果日志文件开始变得太大,您可以每天切换到新日志(例如)。