文章目录
前言一、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++文件操作的学习和实践中有所帮助。