c++ 文件打开模式组合

最近在研究  C++ I/O 操作.. 在文件流部分卡壳了..原因是没有 真正了解到 文件打开模式组合后的各种含义

在搜索了一大堆基本没什么用处的资料后,终于找到一个比较全的组合模式了。

 !!需要特别注意的是   ios:in 与ios::out 组合时,在没有说明ios::trunc 情况下 是不会请空原有记录的

 原文 :http://blog.csdn.net/xxlyyhappy/article/details/6613168

本文在原文基础上 添加了一些的东西 丰富了文章内容。

打开模式:

in:打开文件时做读操作;

out:打开文件时做写操作;

app:在每次写之前找到文件尾;

ate:打开文件后立即将文件定位在文件尾;(与ios::app存在区别)

trunc:打开文件时清空已存在的文件流;

binary:以二进制模式进行IO操作;(默认时采用的是 文本文件模式)

有效组合:

并不是所有的打开模式都可以同时制定,有些模式组合是没有意义的,例如:in和trunc,准备读取文件流,但是trunc清空了文件流。

out:打开文件时做写操作,删除已经存在的数据;

out  |  app:打开文件时做写操作,在文件尾写入,不清空已经存在的数据;

out  |  trunc:打开文件时做写操作,删除已经存在的数据,与out模式相同;(之所以相同 是因为默认的构造函数就是用  ios::out|ios|trunc)

in:打开文件时做读操作;

in  |  out打开文件时做读写操作,并定位于文件的开头处,不清空已经存在的数据;

in  |  out  |  trunc:打开文件时做读写操作,删除文件中已经有的数据;

当文件同时以in out模式打开时,不会清空已有数据;

如果只使用了out,而没有指定in模式,则会清空已有数据;

如果使用了trunc,不论是否使用了in,都会清空已有的数据(前提是有ios::out);

ifstream 对象 提供默认 文件模式 ios::in;

ofstream 对象提供默认 文件模式 ios::out|ios::trunc;

fstream 对象不提供默认的 文件模式  因此只能自己敲了;

 另外对于二进制文件I/O操作。还涉及到一个概念 随机存取, 它相对于 文本文件的顺序存取而言

所谓顺序存取 即 按其在文件中的逻辑顺序依次存取的,只能从头往下读;有点类似堆栈的概念;

而随机存取则 另辟蹊径  使得可以直接在流中的任意位置移动;

随机存取涉及的函数有以下四个:

seekg(...省略参数)  (g 为get)seekp(...省略参数)  (p 为put)  tellg(void)  ,tellp(void);

对于读文件 使用seekg()  或者 tellg()   (省略了参数)

对于写文件  使用seekp()  或者 tellp()  (省略了参数)

tellg()  和 tellp()  返回当前流位置;

seekg()  和 seekp() 函数用于设置流位置,C++提供两种版本

1.只有一个参数  seekg( pos) (用于绝对定位):

seekg(16) 移动到流中位置16上 ,注意流位置从0开始;

2.含有两个参数(用于相对定位):

例如:seekg( -2,ios::end) ,seekg( 4,ios::beg)  ,第一个参数是 相对偏移量,ios::end 和 ios::beg  为流常量  分别意为 流结尾 和 流开头 。

 -2 (向前移动2个单位),4( 向后移动4个单位)。

seekp()  , tellp() 有相同用法  这里不再累述。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值