作者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
1F:推 kameng:借问一下 如果只能限制不可以有buffer 有办法吗? 08/11 13:01
2F:→ VictorTom:刚想到, 读到buffer後, 可以直接写回同一档案不是吗?? 08/11 13:04
3F:推 jlovet:除了open solaris zfs之外没有类似的档案系统... 08/11 13:36
4F:→ icetofux:其实我也挺担心BUFFER的事,因为第一笔写入的资料量很 08/11 13:41
5F:→ icetofux:庞大,反倒是第二笔只是一个TITLE而已。 08/11 13:41
6F:推 VictorTom:大绝招, 第二笔写成新档案, 然後copy b + a > a ....XD 08/11 13:52
7F:推 UNARYvvv:第一笔大约是多大呢? 08/11 22:51
8F:→ icetofux:最多可能会有几千行,每行约50个字元。 08/12 09:41