C++文件存取操作

文件存取(File Access)
1.
stream 可用来存取文件,C++标准库提供了四个template classes,并预先定义了四个标准特化版本:
1). basic_ifstream<> 及特化版本: ifstream 和 wifstream, 用来读取文件。
2). basic_ofstream<>及特化版本: ofstream 和 wofstream, 用来将数据写入文件。
3). basic_fstream<>及特化版本: fstream 和 wfstream,用于读写文件。
4). basic_filbuf<> 及特化版本filebuf和wfilebuf,被其他file stream classes 用来进行实际的字符读写工作。

2.
std::ofstream file(filename.c_str());
file stream classes不以string作为构造函数的参数型别,所有需要以c_str()转换成const char* 。

3.
为了准确控制文件处理模式,class ios_base定义了一组标志,其型别都是openmode:
in: 打开,用于读取(是ifstream的缺省模式)
out: 打开,用于改写(这是ofstream的缺省模式)
app: 写入时始终添加于尾端
ate: 打开文件之后令读写位置移至文件尾端(标志名称是"at end"之意)
trunc: 将先前的文件内容移除(remove)
binary: 不要替换特殊字符

4. c++定义了三个成员函数来显式地开启或关闭file stream所拥有的文件:
open();
open(name, flags);
close();
is_open(); // 判断文件是否打开
处理过文件之后,必须调用clear()以清除当时被设于文件尾端的状态标志。这是必要的,因为有可能当前的stream对象被多个文件共享。open()并不会清除任何标志状态,因此如果某个stream未处于良好状态,在关闭并重新打开之后,你还是必须调用clear()以取得一个良好状态。

5. 随机存取:
下面的函数可用来为c++ streams确定读写位置:
basic_istream<>
tellg(): 返回读取位置
seekg(pos): 设置“绝对读取位置”
seekg(offset, rpos): 设置"相对读取位置"
类似的,有:
basic_ostream<>
tellp(): 返回写入位置
seekp(pos)
seekp(offset, rpos)

g表示get,p表示put。

tellg()会返回一个绝对位置,型别为pos_type。C++标准程序库使用streampos和streampos型别来定义相应字符特性中pos_type.因此使用long 或 unsigned long这是错误的,因为streampos无论如何不是一个整数型别(早先时候,streampos的确只是一个unsigned long)。

至于相对位置,offset可以和三个位置先关,型别为seekdir:
beg: 位置是相对开头而言
cur: 位置相对当前位置而言
end: 位置相对于结尾而言

eg:
file.seekg(0, std::ios::beg) // seek to the begining of the file
file.seekg(-10, std::ios::end) // seek 10 characters before the end
note:
当使用seekg(0, std::ios::end)时,文件handle移动到文件末端,若此时想将文件输入到某个字符串中,需要将handle重新移动到文件开始处。

6. 连接Input Streams和Output Streams
tie() 完成“松耦合”
rdbuf()可完成“紧耦合”

转载地址:http://www.douban.com/note/237669425/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值