除了标准输入输出流类istream、ostream和iostream类外,还有3个用于文件操作的文件类:
流的名称 | 流的作用 |
ifstream类 | 从istream类派生的,用来支持从磁盘文件的输入 |
ofstream类 | 从ostream类派生的,用来支持向磁盘文件的输出 |
fstream类 | 从iostream类派生的,用来支持对磁盘文件的输入输出 |
1、调用成员函数open的一般形式为:
文件流对象.open(磁盘文件名, 输入输出方式);
磁盘文件名可以包括路径,如"c:\new\\f1.dat",如缺省路径,则默认为当前目录下的文件。
2、在定义文件流对象时指定参数
在声明文件流类时定义了带参数的构造函数,其中包含了打开磁盘文件的功能。因此,可以在定义文件流对象时指定参数,调用文件流类的构造函数来实现打开文件的功能。如
ostream outfile("f1.dat",ios::out);
例如:
(1)ofstream outfile;
outfile.open("f1.dat",ios::out); //向文件中写入数据,失败返回0
(2)ofstream outfile("f1.dat", ios::out);
方 式 | 作用 |
ios::in | 以输入方式打开文件 |
ios::out | 以输出方式打开文件(这是默认方式),如果已有此名字的文件,则将其原有内容全部清除 |
ios::app | 以输出方式打开文件,写入的数据添加在文件末尾 |
ios::ate | 打开一个已有的文件,文件指针指向文件末尾 |
ios: :trunc | 打开一个文件,如果文件已存在,则删除其中全部数据,如文件不存在,则建立新文件。如已指定了 ios::out 方式,而未指定ios: :app,ios::ate,ios: :in,则同时默认此方式 |
ios:: binary | 以二进制方式打开一个文件,如不指定此方式则默认为ASCII方式 |
ios::nocreate | 打开一个已有的文件,如文件不存在,则打开失败。nocrcate的意思是不建立新文件 |
ios:: noreplace | 如果文件不存在则建立新文件,如果文件已存在则操作失败,replace 的意思是不更新原有文件 |
ios::in l ios::out | 以输入和输出方式打开文件,文件可读可写 |
ios:: out | ios::binary | 以二进制方式打开一个输出文件 |
ios::in l ios::binar | 以二进制方式打开一个输入文件 |
判断结尾:
每读入一个字节,文件指针就后移一个字节。当文件指针移到最后,就会遇到文件结束EOF(文件结束符也占一个字节,其值为-1),此时流对象的成员函数eof的值为非0值(一般设为1),表示文件结束了。
#include<iostream>
#include <fstream>
using namespace std;
int main()
{
char buffer[1024];
ofstream outfile("QQ.txt", ios::out);//写入文件
outfile << "A" <<endl<<"B"<<endl;
outfile.close();
ifstream infile("QQ.txt",ios::in);//读取文件
while (!infile.eof())
{
infile.getline(buffer, 1000);
cout << buffer;
}
outfile.close();
}