2010-04-17 97 views
5

我有一个运行所有时间的服务并且还保留一个日志文件。它基本上每隔几秒就向日志文件添加新行。我写了一个小文件,它读取这些行,然后解析它们以执行各种操作。我的问题是如何删除已从日志文件中解析出的行,而不会中断服务写入日志文件?C从文本文件中删除第一行而不重写文件

通常,当我需要删除文件中的某一行时,我打开原始文件和临时文件,然后将所有行写入临时文件,但要删除原始文件。显然这种方法不会在这里提到。

那么我该如何去删除它们呢?

+0

Dupe of http://stackoverflow.com/questions/1151713/delete-a-line-from-a-file-in-c-language等等 – 2010-04-17 13:03:56

回答

0

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

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

5

在大多数常用的文件系统中,不能在不重写整个文件的情况下从文件开头删除一行。我建议不要使用一个大文件,而应使用大量小文件,并每天轮换一次。旧文件在您不再需要时会被删除。

2

遗憾的是,无法重写文件,无论是在原地还是作为单独的文件都无法完成。

有一件事可能想要看的是在另一个文件中保留一个指针,指定第一个未处理行的位置。

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

您仍然需要在某个位置滚动文件,以免它们继续增长。

0

你不能,那只是不是文件如何工作。

这听起来像你需要某种信息日志服务/库,你的程序可以连接到以日志信息,然后可以隐藏文件打开的底层细节/关闭等

0

如果每个日志行有一个唯一的标识符(甚至只是行号),你可以简单地存储在你的日志解析标识符,直到你解析。这样你就不必在日志文件中改变任何东西。

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