C++ 文件处理:如何在 C++ 中打开、写入、读取、关闭文件
C++ 文件处理是什么?
文件将数据永久存储在存储设备中。通过文件处理,程序输出可以存储在文件中。在文件中的数据可以执行各种操作。
流是执行输入/输出操作的设备的抽象。您可以将流表示为无限长度的字符的目标或源。这将由它们的使用情况决定。C++ 为您提供了一个附带文件处理方法的库。让我们讨论一下。
fstream 库
fstream 库为 C++ 程序员提供了三个用于处理文件的类。这些类包括
- ofstream – 此类表示输出流。它用于创建文件并将信息写入文件。
- ifstream – 此类表示输入流。它用于从数据文件中读取信息。
- fstream – 此类通常表示文件流。它附带 ofstream/ifstream 功能。这意味着它可以创建文件、写入文件、读取数据文件。
下图使其易于理解
要使用 fstream 库的上述类,您必须将其作为头文件包含在程序中。当然,您将使用 #include 预处理器指令。您还必须包含 iostream 头文件。
如何打开文件
在对文件执行任何操作之前,您必须先打开它。如果您需要写入文件,请使用 fstream 或 ofstream 对象打开它。如果您只需要从文件读取,请使用 ifstream 对象打开它。
这三个对象,即 fstream、ofstream 和 ifstream,都定义了 open() 函数。该函数采用此语法
open (file_name, mode);
- file_name 参数表示要打开的文件名。
- mode 参数是可选的。它可以取以下任何值
值 | 描述 |
---|---|
ios::app | 追加模式。发送到文件的输出会被追加到文件末尾。 |
ios::ate | 它为输出打开文件,然后将读写控件移动到文件末尾。 |
ios::in | 它为读取打开文件。 |
ios::out | 它为写入打开文件。 |
ios::trunc | 如果文件存在,文件元素将在打开前被截断。 |
可以同时使用两种模式。您可以使用 | (OR) 运算符将它们组合起来。
示例 1
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file", ios::out); if (!my_file) { cout << "File not created!"; } else { cout << "File created successfully!"; my_file.close(); } return 0; }
输出
这是代码的屏幕截图:
代码解释
- 在程序中包含 iostream 头文件以使用其函数。
- 在程序中包含 fstream 头文件以使用其类。
- 包含 std 命名空间到我们的代码中以使用其类而无需调用其名称。
- 调用 main() 函数。程序逻辑应放在其主体内。
- 创建 fstream 类的对象并将其命名为 my_file。
- 对上述对象应用 open() 函数来创建一个新文件。out 模式允许我们写入文件。
- 使用 if 语句检查文件是否创建失败。
- 如果文件未创建,则在控制台上打印的消息。
- if 语句体的结束。
- 使用 else 语句说明如果文件已创建该怎么办。
- 如果文件已创建,则在控制台上打印的消息。
- 对对象调用 close() 函数来关闭文件。
- else 语句体的结束。
- 如果程序成功完成,它必须返回值。
- main() 函数主体的结尾。
如何关闭文件
一旦 C++ 程序终止,它会自动
- 刷新流
- 释放分配的内存
- 关闭打开的文件。
但是,作为程序员,您应该学会关闭打开的文件,然后再终止程序。
fstream、ofstream 和 ifstream 对象具有用于关闭文件的 close() 函数。该函数采用此语法
void close();
如何写入文件
您可以直接从 C++ 程序写入文件。为此,您可以使用流插入运算符 (<<)。要写入文件的文本应放在双引号内。
让我们演示一下。
示例 2
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file.txt", ios::out); if (!my_file) { cout << "File not created!"; } else { cout << "File created successfully!"; my_file << "Guru99"; my_file.close(); } return 0; }
输出
这是代码的屏幕截图:
代码解释
- 在程序中包含 iostream 头文件以使用其函数。
- 在程序中包含 fstream 头文件以使用其类。
- 在程序中包含 std 命名空间,以便在不调用它的情况下使用其类。
- 调用 main() 函数。程序逻辑应添加到此函数的主体中。
- 创建 fstream 类的实例并将其命名为 my_file。
- 使用 open() 函数创建一个名为 my_file.txt 的新文件。该文件将在 out 模式下打开以写入内容。
- 使用 if 语句检查文件是否未打开。
- 如果文件未打开,则在控制台上打印的文本。
- if 语句主体的结束。
- 使用 else 语句说明如果文件已创建该怎么办。
- 如果文件已创建,则在控制台上打印的文本。
- 向创建的文件写入一些文本。
- 使用 close() 函数关闭文件。
- else 语句体的结束。
- 程序在成功完成后应返回值。
- main() 函数体结束。
如何读取文件
您可以将文件信息读取到 C++ 程序中。这可以使用流提取运算符 (>>) 来实现。您使用该运算符的方式与使用它从键盘读取用户输入的方式相同。但是,您使用的是 ifstream/fstream 对象,而不是 cin 对象。
示例 3
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file.txt", ios::in); if (!my_file) { cout << "No such file"; } else { char ch; while (1) { my_file >> ch; if (my_file.eof()) break; cout << ch; } } my_file.close(); return 0; }
输出
没有这样的文件
这是代码的屏幕截图:
代码解释
- 在程序中包含 iostream 头文件以使用其函数。
- 在程序中包含 fstream 头文件以使用其类。
- 在程序中包含 std 命名空间,以便在不调用它的情况下使用其类。
- 调用 main() 函数。程序逻辑应添加到此函数的主体中。
- 创建 fstream 类的实例并将其命名为 my_file。
- 使用 open() 函数创建一个名为 my_file.txt 的新文件。该文件将在 in 模式下打开以从中读取。
- 使用 if 语句检查文件是否存在。
- 如果未找到文件,则在控制台上打印的文本。
- if 语句主体的结束。
- 使用 else 语句说明如果找到文件该怎么办。
- 创建一个名为 ch 的字符变量。
- 创建一个while 循环来迭代文件内容。
- 将文件内容写入/存储到变量 ch 中。
- 使用 if 条件和 eof() 函数(即文件结束)来确保编译器在未到达文件末尾时继续从文件读取。
- 使用 break 语句在到达文件末尾时停止从文件读取。
- 在控制台上打印变量 ch 的内容。
- while 循环体的结束。
- else 语句体的结束。
- 调用 close() 函数关闭文件。
- 程序在成功完成后应返回值。
- main() 函数体结束。
摘要
- 通过文件处理,程序的输出可以发送并存储在文件中。
- 然后可以对文件中的数据应用多种操作。
- 流是表示执行输入/输出操作的设备的抽象。
- 流可以表示为无限长度的字符的目标或源。
- fstream 库为 C++ 程序员提供了文件处理方法。
- 要使用该库,您必须使用 #include 预处理器指令将其包含在程序中。