2011-03-01 128 views
1

我想從文本文件中刪除一些信息而不移動它的所有記錄。例如給出了一個文本文件customers.txt。它有很多記錄由#分隔符分隔。並且每條記錄包含由;分隔的字段。像這樣:1665;John;Smith給出一個客戶ID,我想刪除一個具有相應ID的客戶。我可以在文件中找到記錄的偏移量和長度,但不知道如何刪除它。我必須重寫整個文件嗎?如何從文件中刪除記錄?

注:我使用標準C++與g ++ 4.5和libst4。

+0

可能重複的[如何只覆蓋部分文件在c + +](http://stackoverflow.com/questions/2530274/how-to-overwrite-only-part-of-a-file-in-c ) – 2011-03-01 14:42:39

+0

@Simone:哎呀。沒有看到它。刪除了無用的評論。謝謝。 – ereOn 2011-03-01 14:43:45

回答

8

你有幾個選擇。 1)重寫文件的其餘部分,使其超出要刪除的記錄。 2)用某些指示符替換記錄,將其刪除,並在解析文件時處理該記錄(例如用#或其他特殊字符替換正在刪除的條目)。

+0

+1發佈相同,但稍後;) – 2011-03-01 14:44:26

+0

好的。我會替換那樣的。 (我只是想知道是否有辦法將文件拆分成一些碎片,像操作系統一樣......) – 2011-03-01 14:55:30

+0

@sorush沒有原生的方式來做到這一點。這並不是說如果你願意,你不能寫一個圖書館去做。 – Lou 2011-03-01 16:02:37

3

是的,你必須重寫整個文件。

我建議這個算法:

  • 創建臨時文件;
  • 對於每個記錄是不是將被刪除,將其複製到臨時文件中;
  • 將臨時文件與原始文件交換。