作者pico2k (風月)
站內C_and_CPP
標題Re: [問題] 從檔案開頭寫入資料
時間Tue Aug 11 12:34:27 2009
※ 引述《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