参考:http://www.weixueyuan.net/view/6412.html
总结:
文件类型:
计算机上的文件其实是数据的集合,对文件的读写归根结底还是对数据的读写操作。文件可以大致分为两种:文本文件和二进制文件。
文本文件它的每一个字节存放的是一个ASCII码,代表一个字符。
二进制文件是将内存中的数据按照其在内存中的存储形式原样存放在磁盘上。
文本文件用记事本打开,显示的是字符,如下面左图,而用记事本打开一个二进制文件则显示的是一堆乱码。
文件的打开和关闭:
ifstream类和ofstream类中都有一个成员函数open,该函数可以用类的对象调用。open函数有两个参数,第一个参数是需要打开的文件名,这个参数可以是字符指针、字符数组或string类型,第二个参数是输入输出格式。
类ifstream和类ofstream中的构造函数中已经包含了open函数的功能,因此我们为了方便,通常会在创建对象时就将参数列出,利用带参数的构造函数打开文件。
打开文件后处理完数据需要关闭文件,我们直接用对象调用close()函数就可以了。
文件的读写操作:
对文本文件的读写操作有两种方式:一种方式是使用输入输出操作符“<<”、“>>”;另一种方式是使用put、get、getline等函数进行操作。
第二种方式是使用函数,但是这些函数只是能用于处理字符,对于其它数据类型则有些有心无力了,为此还是建议使用第一种方式,因为第一种方式重载了输入输出操作符,它可以处理所有内建数据类型。
----------------------------------------
计算机上的文件其实是数据的集合,对文件的读写归根结底还是对数据的读写操作。文件可以大致分为两种:文本文件和二进制文件。
文本文件它的每一个字节存放的是一个ASCII码,代表一个字符。二进制文件是将内存中的数据按照其在内存中的存储形式原样存放在磁盘上。文本文件用记事本打开,显示的是字符,如下面左图,而用记事本打开一个二进制文件则显示的是一堆乱码,如下面右图所示。
![](http://www.weixueyuan.net/uploads/allimg/150303/8-1503031GF5X2.png)
![](http://www.weixueyuan.net/uploads/allimg/150303/8-1503031GI3F0.png)
例1:
#include <iostream> #include <fstream> using namespace std; int main() { int A[ 3 ][ 10 ]; int i, j; ifstream input( "input.txt", ios::in ); if( ! input ) { cerr << "Open input file error!" << endl; exit( -1 ); } ofstream output( "output.txt", ios::out ); if( ! output ) { cerr << "Open output file error!" << endl; exit( -1 ); } for( i = 0; i < 3; i++ ) { for( j = 0 ; j < 10; j++ ) { input >> A[ i ][ j ]; } } for( i = 0; i < 3; i++ ) { for( j = 0 ; j < 10; j++ ) { cout << A[ i ][ j ] <<" "; } cout << endl; } for( i = 0; i < 3; i++ ) { for( j = 0 ; j < 10; j++ ) { output << A[ i ][ j ] <<" "; } output << " "; } input.close(); output.close(); return 0; }
我们先通过例1来介绍文本文件的读写,先来看一下头文件,因为我们在程序中使用了cout和cerr对象,因此必须要包含iostream头文件,因为是文件操作故而还需要包含fstream头文件。在主函数中我们先来看一下文件打开操作。ifstream类和ofstream类中都有一个成员函数open,该函数可以用类的对象调用。open函数有两个参数,第一个参数是需要打开的文件名,这个参数可以是字符指针、字符数组或string类型,第二个参数是输入输出格式。下标中列出了一些输入输出格式。
格式 | 用途 |
---|---|
ios::in | 以输入方式打开文件 |
ios::out | 以输出方式打开文件,如果文件不存在则新建,如果文件存在就将其原有内容全部清空 |
ios::app | 输出的数据追加到文件末尾 |
ios::ate | 打开一个文件,并将指针定位到文件末尾 |
ios::trunc | 打开一个文件,如果文件不存在则新建,如果存在,则清空原有文件中的内容 |
ios::binary | 以二进制方式打开文件,如果不指定则默认采用文本方式打开文件 |
ios::in | ios::out | 以输出和输入方式打开文件 |
ios::in | ios::binary | 以输入方式打开一个二进制文件 |
ios::out| ios::binary | 以输出方式打开一个二进制文件 |
open函数如果打开失败则返回0,也即false,否则则为一个非零值。当然我们的类ifstream和类ofstream中的构造函数中已经包含了open函数的功能,因此我们为了方便,通常会在创建对象时就将参数列出,利用带参数的构造函数打开文件。而本例中使用的就是这样的一种方式,例如“ifstream input( "input.txt", ios::in ); ”,通常我们都会使用这种方式,因为这种方式方便。在程序中我们也检测了文件是否打开成功,如果打开成功则对象创建成功,为一个非0值。打开文件后处理完数据需要关闭文件,我们直接用对象调用close()函数就可以了。
对文本文件的读写操作有两种方式:一种方式是使用输入输出操作符“<<”、“>>”;另一种方式是使用put、get、getline等函数进行操作。第二种方式是使用函数,但是这些函数只是能用于处理字符,对于其它数据类型则有些有心无力了,为此还是建议使用第一种方式,因为第一种方式重载了输入输出操作符,它可以处理所有内建数据类型。在本例中也是使用第一种方式处理整型数据。从例1中我们也可以看到从文件输入和输出与标准输入输出使用方法其实是一样的,只不过是将类对象由cout和cin换成了ofstream类和ifstream类的对象。在示例程序中我们先是从input.txt文件中读取数据存入到数组A[3][10]中,然后再将A[3][10]数组中的数据打印到显示器,之后再将数据写入到output.txt文件中。