[轉錄]Re: [問題] fseek and fopen

看板LinuxDev作者 (rezod)時間17年前 (2006/11/29 21:44), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板] 作者: LPH66 (涼宮春日症候群) 看板: C_and_CPP 標題: Re: [問題] fseek and fopen 時間: Tue Nov 7 21:42:50 2006 打個比方吧 一個檔案就像是一個已經有資料的陣列 而檔案指標就像是一個指向陣列中某處的指標 我們可以用fseek來改變它 而寫出資料進檔案就相當於我們把資料放進那個陣列(指標所指的地方)裡 而如果就像你用的 指標調好後直接寫入 那就會把舊的東西蓋掉 (想成是陣列的話就不意外了吧? array[100]=5; 就會把[100]這位置的東西蓋掉) 那這要如何解決呢? 從陣列來看 我們有兩種方法 (1) 把後面的資料全部乾坤大挪移 往後移出空間來 對回檔案處理上就是要從最後一個byte起往後搬 開檔→for(最後一個byte到插入點) {讀入那個byte; 寫入n個byte之後的位置;} →移到插入點→寫入新資料→關檔 不過這要預先知道要插入的資料有多長 (算)是一個缺點 (2) 開新的陣列, 把插入點之前的資料copy過去 把要插入的資料加進去 再把插入點之後的資料copy過去 對回檔案處理就是 開新檔案→copy過去插入點前資料→寫入新資料→copy餘下資料→關檔 (→刪舊檔→新檔名改回舊檔名) 這個就不用預先知道要插入的資料有多長了 -- 実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」 亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」 実琴:「難道你沒有男人的尊嚴了嗎?!」 亨:(斷然道)「沒有。在節衣縮食生活吃緊學生面前,沒有那種東西。」 --プリンセス・プリンセス 第二話 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.192.197.115 ※ 編輯: LPH66 來自: 192.192.197.115 (11/07 21:43)

11/07 23:28,
謝謝指教, 我有想到第二種作法, 只是嫌麻煩, 想說也許可以
11/07 23:28

11/07 23:28,
直接針對同一個檔案作插入的動作而不用再寫出新檔
11/07 23:28

11/07 23:29,
不過看起來, 如果插入點後面資料還很多時, 要全部往後搬
11/07 23:29

11/07 23:30,
真的挺麻煩的, 所以我還是用第二種方式好了, 謝謝..^^
11/07 23:30
-- It is a hard matter, my fellow citizens, to argue with the belly, since it has no ears. -- Marcus Porcius Cato -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.176.56

11/29 21:44, , 1F
從C_and_CPP轉來的
11/29 21:44, 1F

11/30 00:22, , 2F
11/30 00:22, 2F

11/30 06:38, , 3F
和你原先的想法不是一樣嗎 @@
11/30 06:38, 3F

12/05 19:35, , 4F
結論就是沒有更好的方法XD
12/05 19:35, 4F
文章代碼(AID): #15ROwofW (LinuxDev)