作者icetofux (豆腐)
看板C_and_CPP
標題[問題] 從檔案開頭寫入資料
時間Tue Aug 11 12:03:29 2009
請問一下,如果我想寫入同一個檔案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) ->會將第一次寫入的內容刪除。
都不符合我的需求,請問是不是有方法能達到這樣的需求呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.67.181.135
推 suhorng:我的想法是要不從檔案尾寫入,讀取的時候倒著讀,或是把第 08/11 12:07
→ suhorng:一次寫入的內容全部讀進來 再重新寫入 //私心喜歡第一種 08/11 12:07
→ suhorng:啊, 倒著讀的意思是說seek到要讀取的地方後讀進來,在程式 08/11 12:08
→ suhorng:中再反過來看 08/11 12:08
→ icetofux:不好意思,我有點看不懂第一個方式,可以麻煩再說明一下 08/11 12:31
→ icetofux:嗎? 08/11 12:32
推 Ebergies:第一次寫 CBA, 第二次寫 FED, 讀出 CBAFED 倒著印 DEFABC 08/11 13:07