C++ 文件处理:如何在 C++ 中打开、写入、读取、关闭文件

C++ 文件处理是什么?

文件将数据永久存储在存储设备中。通过文件处理,程序输出可以存储在文件中。在文件中的数据可以执行各种操作。

流是执行输入/输出操作的设备的抽象。您可以将流表示为无限长度的字符的目标或源。这将由它们的使用情况决定。C++ 为您提供了一个附带文件处理方法的库。让我们讨论一下。

fstream 库

fstream 库为 C++ 程序员提供了三个用于处理文件的类。这些类包括

  • ofstream – 此类表示输出流。它用于创建文件并将信息写入文件。
  • ifstream – 此类表示输入流。它用于从数据文件中读取信息。
  • fstream – 此类通常表示文件流。它附带 ofstream/ifstream 功能。这意味着它可以创建文件、写入文件、读取数据文件。

下图使其易于理解

fstream library
fstream 库

要使用 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;
}

输出

Open Files

这是代码的屏幕截图:

Open Files

代码解释

  1. 在程序中包含 iostream 头文件以使用其函数。
  2. 在程序中包含 fstream 头文件以使用其类。
  3. 包含 std 命名空间到我们的代码中以使用其类而无需调用其名称。
  4. 调用 main() 函数。程序逻辑应放在其主体内。
  5. 创建 fstream 类的对象并将其命名为 my_file。
  6. 对上述对象应用 open() 函数来创建一个新文件。out 模式允许我们写入文件。
  7. 使用 if 语句检查文件是否创建失败。
  8. 如果文件未创建,则在控制台上打印的消息。
  9. if 语句体的结束。
  10. 使用 else 语句说明如果文件已创建该怎么办。
  11. 如果文件已创建,则在控制台上打印的消息。
  12. 对对象调用 close() 函数来关闭文件。
  13. else 语句体的结束。
  14. 如果程序成功完成,它必须返回值。
  15. 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;
}

输出

How to Write to Files

这是代码的屏幕截图:

How to Write to Files

代码解释

  1. 在程序中包含 iostream 头文件以使用其函数。
  2. 在程序中包含 fstream 头文件以使用其类。
  3. 在程序中包含 std 命名空间,以便在不调用它的情况下使用其类。
  4. 调用 main() 函数。程序逻辑应添加到此函数的主体中。
  5. 创建 fstream 类的实例并将其命名为 my_file。
  6. 使用 open() 函数创建一个名为 my_file.txt 的新文件。该文件将在 out 模式下打开以写入内容。
  7. 使用 if 语句检查文件是否未打开。
  8. 如果文件未打开,则在控制台上打印的文本。
  9. if 语句主体的结束。
  10. 使用 else 语句说明如果文件已创建该怎么办。
  11. 如果文件已创建,则在控制台上打印的文本。
  12. 向创建的文件写入一些文本。
  13. 使用 close() 函数关闭文件。
  14. else 语句体的结束。
  15. 程序在成功完成后应返回值。
  16. 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;
}

输出

Read from Files

没有这样的文件

这是代码的屏幕截图:

Read from Files

代码解释

  1. 在程序中包含 iostream 头文件以使用其函数。
  2. 在程序中包含 fstream 头文件以使用其类。
  3. 在程序中包含 std 命名空间,以便在不调用它的情况下使用其类。
  4. 调用 main() 函数。程序逻辑应添加到此函数的主体中。
  5. 创建 fstream 类的实例并将其命名为 my_file。
  6. 使用 open() 函数创建一个名为 my_file.txt 的新文件。该文件将在 in 模式下打开以从中读取。
  7. 使用 if 语句检查文件是否存在。
  8. 如果未找到文件,则在控制台上打印的文本。
  9. if 语句主体的结束。
  10. 使用 else 语句说明如果找到文件该怎么办。
  11. 创建一个名为 ch 的字符变量
  12. 创建一个while 循环来迭代文件内容。
  13. 将文件内容写入/存储到变量 ch 中。
  14. 使用 if 条件和 eof() 函数(即文件结束)来确保编译器在未到达文件末尾时继续从文件读取。
  15. 使用 break 语句在到达文件末尾时停止从文件读取。
  16. 在控制台上打印变量 ch 的内容。
  17. while 循环体的结束。
  18. else 语句体的结束。
  19. 调用 close() 函数关闭文件。
  20. 程序在成功完成后应返回值。
  21. main() 函数体结束。

摘要

  • 通过文件处理,程序的输出可以发送并存储在文件中。
  • 然后可以对文件中的数据应用多种操作。
  • 流是表示执行输入/输出操作的设备的抽象。
  • 流可以表示为无限长度的字符的目标或源。
  • fstream 库为 C++ 程序员提供了文件处理方法。
  • 要使用该库,您必须使用 #include 预处理器指令将其包含在程序中。