文件, 文件流对象ofstream, 缓冲区, 三个不同的概念,关键 理解outfile.clear()作用的关键

(文件, 文件流对象ofstream, 缓冲区, 三个不同的概念,关键)

(由于文件读取是通过缓冲区的,所以直接修改文件内容比较麻烦。)

删除文件的部分内容:

    方法一:建立新文件——可以新建一个文件,然后把想保留的内容转存入新文件,这样就起到间接删除文件内容的作用。

    方法二:建立一个缓冲区buffer,修改内容,然后找对文件offset,buffer

中的修改过的内容插入文件中(覆盖文件中需要修改的内容)。

 

 

    文件的读写是通过缓冲区的,也就是你写的内容先放在缓冲区,存满缓冲区然后统一写入文件。说有可能你的写的文件,由于缓冲区没有刷新,导致没有写入文件中。打个比方,你给工地运砖头,先从放在平板车,存满后,再又系统运送到工地——文件中。如果出现意外,很可能你的砖头存入缓冲区,但是系统没有送到工地就崩溃了,所以工地可能没有你的砖头——内容。————一般不会出现此类特殊情况。明白缓冲区的存在,是文件读写的问题。————但是为了在程序崩溃时,容易定位错误,最好在每个输出语句后显式的刷新缓冲区,可用cout<<flash或者cout<<endl;后者可以也有刷新缓冲区的功能。

 

由于历史原因,打开文件时,C++使用c风格的字符串存储文件名,而不是c++风格的string 类型。如果输入的字符串来存储文件名,最好用c++风格的string来接收,然后用str.c_str属性来提取c风格的字符串。(存储字符串用C++string

 

outfile.open(filename, ios::out )这种默认的打开方式,自动把文件内容清空。

outfile.open(filename, ios::out | ios::app)这种方式在文件尾追加内容。

 

ofstream outfile(filename), 用构造函数打开文件。

 

文件流和缓冲区是不同的,文件流是与文件进行关联的对象。文件流对象可以跟不同的文件进行关联,但每次只可以关联一个。要关联下一个,必须关闭上一个。

(文件, 文件流对象ofstream, 缓冲区, 三个不同的概念,关键)

文件流读完一个文件后,就会记录其状态信息,如果想关联其他文件,必须显性清除其状态ofstream.clear()

Note that :如果遇到文件结束符或者其他错误,文件流对象的属性将记录状态,以后不能再对文件流对象进行操作。即使你关闭文件流对象,也不能清楚属性状态,必须用显式的clear() 来清除属性状态。

综合上两条,如果要重用文件流对象,必须在关联下一个文件之前先 关闭它,并且清空其属性状态。infile.close();infile.clear();

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值