【C++ 拓展】ifstream、ofstream、fstream的使用

人才程序员 2024-10-09 12:35:04 阅读 85

文章目录

前言一、istream1.1 ifstream - 输入流1.2 具体使用构造函数成员函数open 函数:is_open 函数:close 函数:operator>> 重载:rdbuf 函数peek 函数read 函数getline 函数ignore 函数seekg 函数tellg 函数

二、ofstream 类1.1 构造函数1.2 函数成员write 函数

总结


前言

在C++编程中,文件操作是一项常见而重要的任务。为了更便捷地进行文件读写操作,C++提供了三个关键的文件流类:ifstream、ofstream和fstream。这三个类分别用于输入、输出以及读写文件。通过它们,我们能够轻松地处理文件的打开、读取、写入和关闭等操作,为程序员提供了便利的文件处理工具。

在本文中,我们将深入探讨这三个文件流类的基本用法,介绍它们的构造函数、常用成员函数以及一些实际应用示例,以帮助读者更好地理解和运用这些文件流类。


一、istream

1.1 ifstream - 输入流

ifstream 类用于从文件中读取数据,即用于输入流的文件操作。“i” 代表 “input”(输入)。

这个类继承自 istream,允许你从文件中读取数据,就像从键盘输入一样。

你可以使用 ifstream 打开文件并从中读取数据,但不能写入或更改文件的内容。

示例用途包括读取配置文件、文本文件等。

1.2 具体使用

构造函数

explicit ifstream(const char* filename, ios_base::openmode mode = ios_base::in);

参数:

filename:要打开的文件的名称。

mode:文件打开模式,默认为输入模式(ios_base::in)。

成员函数

open 函数:

void open(const char* filename, ios_base::openmode mode = ios_base::in);

参数:

filename:要打开的文件的名称。

mode:文件打开模式,默认为输入模式(ios_base::in)。

功能:打开指定的文件。

is_open 函数:

bool is_open() const;

返回值:如果文件已成功打开,则返回 true;否则返回 false。

功能:检查文件是否已经打开。

close 函数:

void close();

功能:关闭已打开的文件。

operator>> 重载:

istream& operator>>(Type& val);

参数:Type 表示要读取的数据类型。

返回值:返回输入流对象的引用。

功能:从文件中读取数据。

rdbuf 函数

streambuf* rdbuf() const;

功能: 获取与流关联的底层缓冲区的指针。

返回值: 指向底层缓冲区的指针。

peek 函数

int peek();

功能: 返回下一个字符,但不提取它。

返回值: 下一个字符的 ASCII 值,如果到达文件末尾则返回 EOF。

read 函数

istream& read(char* s, streamsize n);

功能: 从流中读取最多 n 个字符到数组 s。

参数:

s:指向存储读取字符的缓冲区的指针。

n:要读取的字符数。

返回值: 一个引用到流对象,用于链式操作。

getline 函数

istream& getline(char* s, streamsize n, char delim);

功能: 从流中读取字符,直到遇到指定的分隔符 delim 或读取了最多 n 个字符为止。

参数:

s:指向存储读取字符的缓冲区的指针。

n:要读取的字符数。

delim:分隔符。

返回值: 一个引用到流对象,用于链式操作。

ignore 函数

istream& ignore(streamsize n = 1, int delim = EOF);

功能: 从流中提取并丢弃字符,直到读取了 n 个字符或遇到指定的分隔符 delim。

参数:

n:要忽略的字符数。

delim:分隔符。

返回值: 一个引用到流对象,用于链式操作。

seekg 函数

istream& seekg(streampos pos);

功能: 设置文件指针的位置。

参数:

pos:新的文件指针位置。可以直接填数字

返回值: 一个引用到流对象,用于链式操作。

streampos 是 C++ 标准库中定义的一种类型,通常用于处理流(stream)的位置信息。在 C++ 中,流是与输入和输出设备(例如文件、标准输入/输出、字符串等)进行数据交互的抽象概念。streampos 实际上是一个类型定义,用于表示流在特定位置的位置信息。

这个类型通常被用作输入输出流的位置指示器。在处理文件或其他类型的流时,你可能需要跟踪当前读取或写入位置,这就是 streampos 起作用的地方。它可以记录特定流的位置,允许你在之后能够定位到这个位置,读取或写入数据,或者直接操作这个位置的内容。

streampos 的具体实现可能因不同的编译器或库而有所不同,但通常它是一个整数类型(比如 long long 或 streamoff),用于表示相对于流起始位置的偏移量或者一个指针,指向流中的特定位置。

在 C++ 中,常用的流类(比如 ifstream、ofstream、stringstream 等)都提供了方法来获取和设置流的位置,通常使用 tellg() 和 seekg() 方法来获取和设置输入流位置,使用 tellp() 和 seekp() 方法来获取和设置输出流位置。这些方法返回或接受 streampos 类型的参数,用于标识流的位置。

总的来说,streampos 是 C++ 中用于表示流位置的类型,可以帮助你管理和操作输入输出流的位置信息。

tellg 函数

streampos tellg();

功能: 获取当前文件指针的位置。

返回值: 当前文件指针的位置。

二、ofstream 类

1.1 构造函数

explicit ofstream(const char* filename, ios_base::openmode mode = ios_base::out);

功能: 构造一个 ofstream 对象,用于向指定文件 filename 写入数据。

参数:

filename:文件的路径和名称。

mode:打开文件的模式,默认为输出模式 (ios_base::out)。

1.2 函数成员

write 函数

ostream& write(const char* s, streamsize n);

功能: 将字符数组 s 中的 n 个字符写入流。

参数:

s:指向要写入的字符数组的指针。

n:要写入的字符数。

返回值: 一个引用到流对象,用于链式操作。

seekp 函数

cpp

ostream& seekp(streampos pos);

功能: 设置文件指针的位置。

参数:

pos:新的文件指针位置。

返回值: 一个引用到流对象,用于链式操作。

tellp 函数

cpp

streampos tellp();

功能: 获取当前文件指针的位置。

返回值: 当前文件指针的位置。

fstream 类

构造函数

cpp

explicit fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out);

功能: 构造一个 fstream 对象,用于对指定文件 filename 进行读写操作。

参数:

filename:文件的路径和名称。

mode:打开文件的模式,默认为输入输出模式 (ios_base::in | ios_base::out)。


总结

文件流是C++中处理文件输入输出的重要工具,而ifstream、ofstream和fstream则是其核心代表。通过本文的介绍,我们了解了它们的基本构造函数、常用成员函数,以及如何在实际编程中应用它们来处理文件。

ifstream 用于读取文件内容,适用于处理输入操作。

ofstream 用于写入文件内容,是处理输出操作的理想选择。

fstream 则可以同时用于读写文件,为灵活的文件操作提供了支持。

无论是读取配置文件、保存用户数据还是进行其他文件相关的操作,这三个文件流类都能够满足各种需求。通过灵活运用它们,程序员能够更高效地处理文件操作,为C++程序的开发提供了强大的支持。希望本文的内容对您在C++文件操作的学习和实践中有所帮助。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。