C++文件类(文件流类)及用法详解

slime2021-11-11 11:06

重定向后的cin和cout可分别用于读取文件中的数据和向文件中写入数据。除此之外,C++标准库中还专门提供了3个类用于实现文件操作,它们统称为文件流类,这3个类分别为:

ifstream:专用于从文件中读取数据;

ofstream:专用于向文件中写入数据;

fstream:既可用于从文件中读取数据,又可用于向文件中写入数据。

值得一提的是,这3个文件流类都位于<fstream>头文件中,因此在使用它们之前,程序中应先引入此头文件。

这3个文件流类的继承关系,如图1所示。

C++文件类(文件流类)及用法详解

可以看到,ifstream类和fstream类是从istream类派生而来的,因此ifstream类拥有istream类的全部成员方法。同样地,ofstream和fstream类也拥有ostream类的全部成员方法。这也就意味着,istream和ostream类提供的供cin和cout调用的成员方法,也同样适用于文件流。并且这3个类中有些成员方法是相同的,比如operator<<()、operator>>()、peek()、ignore()、getline()、get()等。

值得一提的是,和<iostream>头文件中定义有ostream和istream类的对象cin和cout不同,<fstream>头文件中并没有定义可直接使用的fstream、ifstream和ofstream类对象。因此,如果我们想使用该类操作文件,需要自己创建相应类的对象。

为什么C++标准库不提供现成的类似fin或者fout的对象呢?其实很简单,文件输入流和输出流的输入输出设备是硬盘中的文件,硬盘上有很多文件,到底应该使用哪一个呢?所以,C++标准库就把创建文件流对象的任务交给用户了。

fstream类拥有ifstream和ofstream类中所有的成员方法,表2罗列了fstream类一些常用的成员方法。

成员方法名 适用类对象 功   能
open() fstream
ifstream
ofstream
打开指定文件,使其与文件流对象相关联。
is_open() 检查指定文件是否已打开。
close() 关闭文件,切断和文件流对象的关联。
swap() 交换 2 个文件流对象。
operator>> fstream
ifstream
重载 >> 运算符,用于从指定文件中读取数据。
gcount() 返回上次从文件流提取出的字符个数。该函数常和 get()、getline()、ignore()、peek()、read()、readsome()、putback() 和 unget() 联用。
get() 从文件流中读取一个字符,同时该字符会从输入流中消失。
getline(str,n,ch) 从文件流中接收 n-1 个字符给 str 变量,当遇到指定 ch 字符时会停止读取,默认情况下 ch 为 '\0'。
ignore(n,ch) 从文件流中逐个提取字符,但提取出的字符被忽略,不被使用,直至提取出 n 个字符,或者当前读取的字符为 ch。
peek() 返回文件流中的第一个字符,但并不是提取该字符。
putback(c) 将字符 c 置入文件流(缓冲区)。
operator<< fstream
ofstream
重载 << 运算符,用于向文件中写入指定数据。
put() 向指定文件流中写入单个字符。
write() 向指定文件中写入字符串。
tellp() 用于获取当前文件输出流指针的位置。
seekp() 设置输出文件输出流指针的位置。
flush() 刷新文件输出流缓冲区。
good() fstream
ofstream
ifstream
操作成功,没有发生任何错误。
eof() 到达输入末尾或文件尾。

这里就以fstream类举例,简单演示一下如何使用表2中的一些成员方法操作文件:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
    const char *url ="http://topic.kaikeba.com/cplus/";
    //创建一个 fstream 类对象
    fstream fs;
    //将 test.txt 文件和 fs 文件流关联
    fs.open("test.txt", ios::out);
    //向test.txt文件中写入 url 字符串
    fs.write(url, 30);
    fs.close();
    return 0;
}

执行程序,该程序同目录下会生成一个test.txt文件,该文件的内容为:

http://topic.kaikeba.com/cplus/

注意,初学者只需借助注释看懂程序执行流程即可,具体的代码实现不必深究,后续章节会做详细讲解。

值得一提的是,无论是读取文件中的数据,还是向文件中写入数据,最先要做的就是调用open()成员方法打开文件。同时在操作文件结束后,还必须要调用close()成员方法关闭文件。

以上就是小编为大家整理的“C++文件类(文件流类)及用法详解”一文,更多相关信息尽在C/C++教程频道。

相关推荐

AI入门,从每个人都应该学的AI第一课开始!

人工智能论文体系,助你快速入门AI

Vue3.0从入门到精通

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享