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,失败返回非零值