目录
输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。
和文件有关系的输入输出类主要在fstream.h这个头文件中被定义,在这个头文件中主要被定义了三个类,由这三个类控制对文件的各种输入输出操作,他们分别是ifstream、ofstream、fstream,其中fstream类是由iostream类派生而来,他们之间的继承关系见下图:

由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,所以它在fstream头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。
打开文件是指:
为文件流对象和指定的磁盘文件建立关联,以便使文件流流向指定的磁盘文件;
指定文件的工作方式,如:该文件是作为输入文件还是输出文件,是ASCII文件还是二进制文件。
打开方式:
![]()
第二行是调用输出文件流的成员函数open打开磁盘文件niubi.c,并指定它为输出文件,文件流对象ofs将向niubi.c输出数据。简单的讲,就是niubi.c作为一个输出文件,接收从内存输出的数据。
在定义文件流对象时指定参数:
| 方式 | 作用 |
|---|---|
| ios::in | 以输入方式打开文件 |
| ios::out | 以输出方式打开文件(默认方式),如已有此名字的文件,则将其原有内容全部清除。 |
| ios::app | 以输出方式打开文件,写入的数据添加在文件末尾 |
| ios::trunc | 打开一个文件,如果文件已存在,则删除其全部数据,如不存在,则建立新文件。 |
| ios::binary | 以二进制方式打开一个文件,如不指定此方式则默认为ASCII方式 |
| ios::in | ios::out | 以输入和输出方式打开文件,文件可读可写 |
| ios::out | ios::binary | 以二进制方式打开一个输出文件 |


- class Maker
- {
- public:
- Maker()
- {}
- Maker(const char* name,int age)
- {
- this->age = age;
- //this->name = name; //err
- strcpy(this->name, name);
- }
- public:
- char name[64];
- int age;
- };
- //写文件
- void test9()
- {
- Maker m1("sun",18);
- Maker m2("ha",20);
-
- ofstream ofs;
- ofs.open("text.txt", ios::out | ios::trunc | ios::binary);
- if (!ofs.is_open())
- {
- cout << "open fail" << endl;
- }
- ofs.write((const char*)&m1, sizeof(Maker));
- ofs.write((const char*)&m2, sizeof(Maker));
- ofs.close();
- }
- //读文件
- void test10()
- {
- ifstream ifs;
- ifs.open("text.txt", ios::in | ios::binary);
- if (!ifs.is_open())
- {
- cout << "open fail" << endl;
- }
- Maker m1,m2;
- ifs.read((char*)&m1, sizeof(Maker));
- ifs.read((char*)&m2, sizeof(Maker));
- cout << "Name:" << m1.name << " Age:" << m1.age << endl;
- cout << "Name:" << m2.name << " Age:" << m2.age << endl;
- }
注意:
当文件读写时,类中的成员变量 string 类型。