33 文件操作之文件流的使用

C++完整教程

在上一篇中,我们学习了如何使用 C++ 进行文件的读取与写入。接下来,我们将进一步探讨文件流的使用,这是处理文件操作的核心概念。文件流为我们提供了一种高级的方法来处理文件,不论是文本文件还是二进制文件。

文件流的基本概念

在 C++ 中,文件流是通过 fstream 类来实现的。C++ 提供了三种基本的文件流类型:

  1. ifstream:输入文件流,用于从文件读取数据。
  2. ofstream:输出文件流,用于向文件写入数据。
  3. fstream:双向文件流,既可以读取也可以写入。

引入文件流库

在使用文件流之前,我们需要包含相应的头文件:

1
2
3
#include <fstream>
#include <iostream>
#include <string>

创建文件流对象

下面是一个简单的示例,展示如何创建文件流对象并打开文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
std::ifstream inputFile("example.txt"); // 创建输入文件流对象
std::ofstream outputFile("output.txt"); // 创建输出文件流对象

// 检查文件是否成功打开
if (!inputFile) {
std::cerr << "无法打开输入文件" << std::endl;
return 1;
}

if (!outputFile) {
std::cerr << "无法打开输出文件" << std::endl;
return 1;
}

文件流的读写操作

写入数据到文件

我们可以使用输出文件流 (ofstream) 将数据写入文件。以下是将字符串写入文件的示例:

1
2
3
std::string data = "Hello, World!";
outputFile << data; // 使用流插入运算符写入数据
outputFile.close(); // 关闭文件

从文件读取数据

使用输入文件流 (ifstream) 读取数据非常简单。下面是从文件读取内容的示例:

1
2
3
4
5
std::string line;
while (std::getline(inputFile, line)) { // 一行行读取
std::cout << line << std::endl; // 输出到控制台
}
inputFile.close(); // 关闭文件

文件流的格式化操作

文件流还支持格式化输出。我们可以控制输出内容的格式,如设置精度、宽度等。例如:

1
2
3
4
#include <iomanip>

double pi = 3.14159265358979323846;
outputFile << std::fixed << std::setprecision(2) << pi; // 设置小数点后两位

错误处理与流状态

在处理文件流时,确保文件的打开和读写成功是至关重要的。C++ 提供了方法检查流的状态,比如 .good().fail().eof()

1
2
3
if (inputFile.fail()) {
std::cerr << "读取文件失败" << std::endl;
}

案例:写入并读取学生信息

下面是一个完整的案例,展示如何使用文件流来写入和读取学生的信息。

写入学生信息到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Student {
std::string name;
int age;
};

void writeStudents(const std::string& filename) {
std::ofstream outputFile(filename);
if (!outputFile) {
std::cerr << "无法打开输出文件" << std::endl;
return;
}

Student students[] = {{"Alice", 20}, {"Bob", 21}, {"Charlie", 22}};
for (const auto& student : students) {
outputFile << student.name << " " << student.age << std::endl;
}
outputFile.close();
}

从文件读取学生信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void readStudents(const std::string& filename) {
std::ifstream inputFile(filename);
if (!inputFile) {
std::cerr << "无法打开输入文件" << std::endl;
return;
}

std::string name;
int age;
while (inputFile >> name >> age) {
std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;
}
inputFile.close();
}

主函数

1
2
3
4
5
6
int main() {
const std::string filename = "students.txt";
writeStudents(filename);
readStudents(filename);
return 0;
}

在这个案例中,我们定义了一个 Student 结构体,用于存储学生的姓名和年龄。我们通过 writeStudents 函数将学生信息写入文件,并通过 readStudents 函数从文件读取并输出这些信息。

结束语

本篇教程中,我们学习了 C++ 中的文件流的使用,了解了如何创建、读取和写入文件流。下一篇将带你深入探索 文本文件与二进制文件 的区别以及如何在 C++ 中处理它们。希望你能够继续保持学习热情,逐步掌握 C++ 编程的奥秘!

33 文件操作之文件流的使用

https://zglg.work/c-plusplus-zero/33/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-24

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论