文件操作
首先先来介绍一下什么是文件:
文件是根据特定的目的而收集在一起的有关数据的集合。C++把每一个文件都看成是一个有序的字节流,每个文件都以文件结束标志结束,如果爱要操作某个文件,就必须先打开该文件。当一个文件被打开后,该文件就和一个流关联起来,这里的流实际上是一个字节序列。
C++将文件分为文本文件和二进制文件。二进制文件一般含有特殊的格式或计算机代码,如:图文件和可执行文件等。文本文件则是可以用任何文字处理程序阅读和编辑的简单ASCII文件。
文件操作基本步骤如下:
1.打开文件,将文件指针指向文件,决定打开文件类型。
2.对文件进行读、写操作。
3.在使用完文件后,关闭文件。
freopen与fopen都包含在cstdio库中,先来介绍一下freopen:
重定向版:
命令格式:FILE*freopen(const char * filename,const char * mode,FILE * stream);
参数说明:
Filename:要打开的文件名
Mode :文件打开的模式,和fopen中的模式(r/w)相同
Stream:文件指针,通常使用标准流文件(stdin/stdout/stderr)
其中stdin是标准输入流,stdout是标准输出流,stderr是标准错误流(一般把屏幕设为默认)通过调用freopen,就可以修改标准流文件的默认值,实现重定向。
判断数据流的末尾:
判断数据流的末尾,可以用成员函数eof,对scanf、printf、cin、cout都适用。
fopen版:
先声明变量fin和fout,把scanf改成fscanf,第一个参数为fin;把printf改成fprintf,第一个参数为fout,最后执行fclose,关闭两个文件。
二者优劣:
重定向的写法简单自然,但是不能同时读写文件和标准输入输出;fopen的写法稍显繁琐,但是灵活性比较大(例如可以反复打开并读写文件)。如果把fopen版的程序改成读写标准输入输出,只需赋值fin=stdin;fout=stdout;即可,不要调用fopen和fclose。
文件输入输出流:
在C++中,文件输入流(ifstream)和文件输出流(ofstream)的类,它们的默认输入输出设备都是磁盘文件。但是在使用此类进行输入输出操作时,必须要在程序的首部利用#include指令包进fstream头文件。