[+]文章目录

文件的基本概念

本节中文件指的是 磁盘文件。

C++根据文件(file)内容的数据格式,可分为两类:
  • 文本文件:由字符序列组成,在文本文件中存取的最小信息单位为字符(character),也称ASCII码文件。
  • 二进制文件:存取的最小信息单位为字节(Byte)。

C++把每个文件都看成一个有序的字节流,每一个文件或者以文件结束符(end of file marker)结束,或者在特定的字节号处结束,如下图所示。

C++文件的打开与关闭_(编程第一站)

当打开一个文件时,该文件就和某个流关联起来了。对文件进行读写实际上受到一个 文件定位指针(file position pointer)的控制。

输入流的指针也称为 读指针,每一次提取操作将从读指针当前所指位置开始,每次提取操作自动将读指针向文件尾移动。 输出流指针也称 写指针,每一次插入操作将从写指针当前位置开始,每次插入操作自动将写指针向文件尾移动。

文件的打开与关闭

文件使用的5步骤:
①说明一个文件流对象,这又被称为内部文件:
    ifstream ifile;//只输入用
   ofstream ofile;//只输出用
    fstream iofile;//既输入又输出用

②使用文件流对象的成员函数打开一个磁盘文件。这样在文件流对象和磁盘文件名之间建立联系。文件流中说明了三个打开文件的成员函数。
    void ifstream::open(const char*,int=ios::in,int=filebuf::openprot);
    voidofstream::open(const char*,int=ios::out,int=filebuf::openprot);
    void fstream::open(const char*,int,int=filebuf::openprot);
第一个参数为要打开的磁盘文件名。第二个参数为打开方式,有输入(in),输出(out)等,打开方式在ios基类中定义为枚举类型。第三个参数为指定打开文件的保护方式,一般取默认。所以第二步可如下进行:
    iofile.open(“myfile.txt”,ios::in|ios::out);

上面三个文件流类都重载了一个带默认参数的构造函数,功能与open函数一样:
    ifstream::ifstream(const char*,int=ios::in,int=filebuf::openprot);
    ofstream::ofstream(const char*,int=ios::out,int=filebuf::openprot);
    fstream::fstream(const char*,int,int=filebuf::operprot);
所以①和②两步可合成: fstream iofile(”myfile.txt”,ios::in|ios::out);

③打开文件也应该判断是否成功,若成功,文件流对象值为非零值,不成功为0(NULL),文件流对象值物理上就是指它的地址。因此打开一个文件完整的程序为:
fstream iofile(”myfile.txt”,ios::in|ios::out);
if(!iofile)
{ //“!”为重载的运算符
       cout<<”不能打开文件:”<<”myfile,txt”<<endl;
       return -1;
} //失败退回操作系统

④使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写,这在下一节中讨论。

⑤关闭文件。三个文件流类各有一个关闭文件的成员函数 :
    void ifstream::close();
    void ofstream::close();
    void fstream::close();
使用很方便,如:
    iofile.close();

关闭文件时,系统把该文件相关联的文件缓冲区中的数据写到文件中,保证文件的完整,收回与该文件相关的内存空间,可供再分配,把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。如又要对文件操作必须重新打开。

关闭文件并没有取消文件流对象,该文件流对象又可与其他磁盘文件建立联系。文件流对象在程序结束时,或它的生命期结束时,由析构函数撤消。它同时释放内部分配的预留缓冲区。

« 前一篇