2010-04-17 129 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

如果每個日誌行有一個唯一的標識符(甚至只是行號),你可以簡單地存儲在你的日誌解析標識符,直到你解析。這樣你就不必在日誌文件中改變任何東西。

如果日誌文件開始變得太大,您可以每天切換到一個新文件(例如)。