看板 C_and_CPP 關於我們 聯絡資訊
我在想 C / C++ 要怎麼有效率的修改大檔案的一小部份 例如我想要 把一個 1G ~ 10G 的文字檔 在第五行插入一行我要的文字 我的想法是 1. 開檔 2. 所有文字讀入 buffer 3. 把 buffer 中的前四行 覆寫到檔案裡 把要插入的一行文 寫到檔案裡 把 buffer 中第四行之後的文字 寫到檔案裡 4. 關檔 只是修改一小部份 卻要把整個檔案 read & write 一遍 有沒有比這個更有效率或是好的方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.60.254.53
loveme00835:那就不要讀, 寫一個描述檔就好 05/06 02:08
xxxx9659:版主有點聰明!! 正所謂山不轉路轉 XD 05/06 02:34
假設這是一個大檔蛋存在硬碟裡的示意圖 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)
MOONRAKER:有沒有聽過隨機檔 沒聽過去查一查 05/06 03:01
MOONRAKER:檔案要怎麼存fs會處理 你老實用語言提供的lib就好 05/06 03:02
MOONRAKER:他底下切成一千個fragment也不干你事 05/06 03:03
kuso0516:底層FS只要錯一個的地方 檔案可能就掰掰了 05/06 10:44
changyuheng:file system 是 kernel 在處理的 05/06 14:09
hilorrk:file system 還真不一定是在 kernel...有 FUSE 這東西 05/06 15:01
diabloevagto:filesystem 可以外掛在linux上,不一定在kernel 05/06 15:22
MOONRAKER:總之像以前PCTOOLS那種蠻幹法已經是過眼雲煙了。 05/06 16:45
xxxx9659:懂了!動到底層 file system 的程式,不能那麼隨心所欲 05/07 14:42