C++进阶(九) : 标准I/O【详解】

在这里插入图片描述

C++系统中的I/O标准类都定义在iostream、fstream、strstream三个头文件中,各位头文件包含的类如下:
(1)、进行标准I/O操作时使用iostream头文件,它包含ios、iostream、ostream等类。
(2)、进行文件I/O操作时使用fstream头文件,它包含fstream、istream、ostream等类。
(3)、进行串I/O操作时使用strstream头文件,它包含strstream、istrstream、ostrstream。

1、文件打开
只有使用文件流与磁盘上的文件进行连接后才能对磁盘上的文件进行操作,这个连接过程称为打开文件。
打开文件的方式有两种:
(1)、在创建文件流时候利用构造函数打开文件:
<文件流类> <文件流对象> (<文件名及路径>,<打开方式>)

其中文件流类根据需求可以有以下选择:ifstream(输入流)、ofstream(输出流)、fstream(输入输出流),打开方式有以下选择:

 ios::in        以输入方式打开文件,文件不存在,则返回错误
 ios::out       以输出方式打开文件,文件不存在,则创建文件
 ios::app       以追加方式打开文件,可写入,文件不存在,则创建文件
 ios::ate       打开已存在的文件,文件指针移动到文件尾,可读可写
 ios::binary    以二进制方式打开文件
 ios::trunc     打开文件进行写操作,若文件存在,则清空数据
 ios::nocreate  打开已存在的文件,若文件不存在,则返回错误
 ios::noreplace 创建新文件,如果文件存在,创建失败

例如:

std::ifstream f("/home/temp/123.txt",std::ios::in);

(2)、利用open函数打开文件
<文件流对象>.open (<文件名及路径>,<打开方式>)
文件打开失败,则文件流对象为0值,我们可以依据这个判断函数的执行情况
若在文件流创建或open函数调用时,未指明它的打开方式,则会使用默认打开方式,默认值如下:

std::ofstream --  std::ios::out|std::ios::trunk
std::ifstream --  std::ios::in

例如:

std::ifstream f;
f.open("/home/temp/123.txt",std::ios::in);

2、文件流对象的成员函数

close();  刷新未保存的数据后关闭文件
flush();  刷新文件缓冲区
put(char c):将一个文件写入文件中
rdbuf():返回与流相连接的文件缓冲区对象
tellp():获取输出文件指针位置
seekp( streamoff off, ios::seek_dir dir)或seekp( streamoff off);设置输出文件流偏移
tellg():获取输入文件指针位置
seekg( streamoff off, ios::seek_dir dir )或seekg( streamoff off);设置输入文件流偏移
rdstate():获取文件状态
eof():判断文件指针是否到达文件尾
fail():上次读写出错,但文件仍可用
bad():文件不在可用
good():文件一切正常
clear():清楚文件状态

以下是fstream类特有的成员函数

getline(str,n,'\n'):从文件中读取字符,直到读取到‘\n’或读取n-1个字符后结束
peek():  查找下一个字符,但不从文件中取出
put(c):    将字符c写入到文件中
ignore(n):跳过n个字符,参数为0时,读取下一个字符


另外文件流也重载了"<<"及“>>”操作符,在文本文件读取和写入时,也可以使用这两个运算符。如果想要读写是的二进制文件,则不能再使用上面的函数了,因为二进制文件中包含大量的0,与我们的‘\0’的ASCII的值是一样的,所以读写二进制文件只能使用read和write函数:

istream& read(char* buffer,int len);
ostream& write(char* buffer,int len);

如果想要删除某个文件,可以使用remove函数:

int remove(char* filepath);
#成功返回0,失败返回非零值

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值