看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
kameng:借問一下 如果只能限制不可以有buffer 有辦法嗎? 08/11 13:01
VictorTom:剛想到, 讀到buffer後, 可以直接寫回同一檔案不是嗎?? 08/11 13:04
jlovet:除了open solaris zfs之外沒有類似的檔案系統... 08/11 13:36
icetofux:其實我也挺擔心BUFFER的事,因為第一筆寫入的資料量很 08/11 13:41
icetofux:龐大,反倒是第二筆只是一個TITLE而已。 08/11 13:41
VictorTom:大絕招, 第二筆寫成新檔案, 然後copy b + a > a ....XD 08/11 13:52
UNARYvvv:第一筆大約是多大呢? 08/11 22:51
icetofux:最多可能會有幾千行,每行約50個字元。 08/12 09:41