Re: [問題] 從檔案開頭寫入資料

看板C_and_CPP作者 (風月)時間16年前 (2009/08/11 04:34), 編輯推噓4(404)
留言8則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《icetofux (豆腐)》之銘言: : 請問一下,如果我想寫入同一個檔案2次,且第二次的內容要在第一次前面, : 比方說: : 第一次寫入"ABC"並關閉檔案。 : 第二次寫入"DEF"並關閉檔案。 : 開啟檔案後我希望內容是"DEFABC"。 : 我使用ofstream(檔案名稱,開啟模式)作為開啟檔案的方式,並且已知有6種開啟模式: : ios::app :附加於檔案的尾端。 : ios::ate :指向檔案尾端。 : ios::binary :以二進制模式開啟。 : ios::in :輸入檔案。 : ios::out :輸出檔案。 : ios::trunc :如果檔案內容存在就刪除。 : 第一次開檔我選擇以ios::trunc開啟,並且已經確保它能符合我的需求。 : 第二次開檔我就不太清楚要選什麼了? : 目前已知可以先將不符合需求的ios::in、ios::trunc、ios::binary三種先剔除。 : 接著我嘗試過: : ios::app ->依然從檔案尾端附加。 : ios::app + seekp(0,ios::beg) ->依然從檔案尾端附加。 : ios::out ->會將第一次寫入的內容刪除。 : ios::out + seekp(0,ios::beg) ->會將第一次寫入的內容刪除。 : ios::ate ->會將第一次寫入的內容刪除。 : ios::ate + seekp(0,ios::beg) ->會將第一次寫入的內容刪除。 : 都不符合我的需求,請問是不是有方法能達到這樣的需求呢? 我的作法如下: 1.先把原本檔案的內容讀到buffer裡 2.將要寫入的內容先寫入一個暫存檔案 3.再把buffer裡的資料寫入這個暫存檔案 4.刪除原本的檔案 5.把這個暫存檔案改名為原本的檔案名稱 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.64.95

08/11 13:01, , 1F
借問一下 如果只能限制不可以有buffer 有辦法嗎?
08/11 13:01, 1F

08/11 13:04, , 2F
剛想到, 讀到buffer後, 可以直接寫回同一檔案不是嗎??
08/11 13:04, 2F

08/11 13:36, , 3F
除了open solaris zfs之外沒有類似的檔案系統...
08/11 13:36, 3F

08/11 13:41, , 4F
其實我也挺擔心BUFFER的事,因為第一筆寫入的資料量很
08/11 13:41, 4F

08/11 13:41, , 5F
龐大,反倒是第二筆只是一個TITLE而已。
08/11 13:41, 5F

08/11 13:52, , 6F
大絕招, 第二筆寫成新檔案, 然後copy b + a > a ....XD
08/11 13:52, 6F

08/11 22:51, , 7F
第一筆大約是多大呢?
08/11 22:51, 7F

08/12 09:41, , 8F
最多可能會有幾千行,每行約50個字元。
08/12 09:41, 8F
文章代碼(AID): #1AWFJMfo (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AWFJMfo (C_and_CPP)