[問題] 如何有效率的修改大檔案
我在想 C / C++ 要怎麼有效率的修改大檔案的一小部份
例如我想要 把一個 1G ~ 10G 的文字檔 在第五行插入一行我要的文字
我的想法是
1. 開檔
2. 所有文字讀入 buffer
3. 把 buffer 中的前四行 覆寫到檔案裡
把要插入的一行文 寫到檔案裡
把 buffer 中第四行之後的文字 寫到檔案裡
4. 關檔
只是修改一小部份 卻要把整個檔案 read & write 一遍
有沒有比這個更有效率或是好的方法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.60.254.53
→
05/06 02:08, , 1F
05/06 02:08, 1F
→
05/06 02:34, , 2F
05/06 02:34, 2F
假設這是一個大檔蛋存在硬碟裡的示意圖
A B C D E F G H ... Z //原本大檔案的內容
A B C + + E F G H ... Z //當我修改他的一小部份
紅色部分是現在我的程式會更動的地方 既然會被更動 當然必須 read & write
但是我希望可以像這樣
A B C D E F G H ... Z
A B C + + E F G H ... Z
或是這樣更好
A B C D E F G H ... Z
A B C E F G H ... Z
↓ ↑
+ +
我猜一個檔案存在硬碟理 是可以斷掉不連續的 (至少我的 windows XP 是這樣)
但是要如何控制哪裡斷掉 感覺程式會寫到很底層
這會很難做到嗎 如果很難我就只能像板主說的那樣 寫在另一個檔案了
※ 編輯: xxxx9659 來自: 61.60.254.53 (05/06 02:58)
→
05/06 03:01, , 3F
05/06 03:01, 3F
→
05/06 03:02, , 4F
05/06 03:02, 4F
→
05/06 03:03, , 5F
05/06 03:03, 5F
→
05/06 10:44, , 6F
05/06 10:44, 6F
推
05/06 14:09, , 7F
05/06 14:09, 7F
→
05/06 15:01, , 8F
05/06 15:01, 8F
→
05/06 15:22, , 9F
05/06 15:22, 9F
→
05/06 16:45, , 10F
05/06 16:45, 10F
→
05/07 14:42, , 11F
05/07 14:42, 11F