34 文本文件与二进制文件

C++完整教程

在前一篇文章中,我们详细讨论了文件流的基本使用方法。本文将介绍在 C++ 中如何进行具体的文件操作,重点是文本文件与二进制文件的读写。文件操作是程序设计中非常重要的一部分,掌握文件的读写将使我们的程序能够持久化数据。

文本文件操作

文本文件是最常见的数据存储形式,以可读内容的形式存储信息。在 C++ 中,我们通过文件流来操作文本文件。这里主要使用 std::ifstream 进行读取和 std::ofstream 进行写入。

写入文本文件

我们首先来看如何写入文本文件。下面是一个简单的示例,它创建一个文本文件并写入一些内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
#include <string>

int main() {
std::ofstream outFile("example.txt");

if (!outFile) {
std::cerr << "无法打开文件!" << std::endl;
return 1; // 返回错误代码
}

outFile << "Hello, World!" << std::endl;
outFile << "这是一个文本文件的示例。" << std::endl;

outFile.close(); // 关闭文件
std::cout << "文件写入成功!" << std::endl;

return 0;
}

在上述代码中,我们创建了一个 example.txt 文件,并使用 << 操作符向文件中写入文本。成功写入后,我们关闭了文件以释放资源。

读取文本文件

接下来,我们来看如何读取文本文件。以下代码展示了如何读取之前创建的文本文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
#include <string>

int main() {
std::ifstream inFile("example.txt");
std::string line;

if (!inFile) {
std::cerr << "无法打开文件!" << std::endl;
return 1; // 返回错误代码
}

while (std::getline(inFile, line)) {
std::cout << line << std::endl; // 输出每一行
}

inFile.close(); // 关闭文件
return 0;
}

在上述代码中,我们使用 std::getline 函数逐行读取 example.txt 文件中的内容,并输出到控制台。记得在操作完成后关闭文件。

二进制文件操作

二进制文件是以二进制格式存储数据,不直接可读,但可以高效地存储数据。使用二进制文件的主要优点包括:

  • 更小的文件大小
  • 更快的读写速度
  • 可以存储复杂的数据结构

写入二进制文件

我们可以使用 std::ofstream 以二进制模式写入文件。以下是一个写入二进制文件的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <fstream>

struct Data {
int id;
double value;
};

int main() {
std::ofstream outFile("data.bin", std::ios::binary);

if (!outFile) {
std::cerr << "无法打开文件!" << std::endl;
return 1; // 返回错误代码
}

Data data1 = {1, 13.5};
Data data2 = {2, 24.5};

outFile.write(reinterpret_cast<char*>(&data1), sizeof(data1));
outFile.write(reinterpret_cast<char*>(&data2), sizeof(data2));

outFile.close(); // 关闭文件
std::cout << "二进制文件写入成功!" << std::endl;

return 0;
}

在这个示例中,我们定义了一个结构体 Data,包含 idvalue 字段。我们使用 write 方法将结构体以二进制格式写入 data.bin 文件。注意 reinterpret_cast<char*> 的使用,这里它将结构体转换为字符指针以进行文件写入。

读取二进制文件

下面的代码展示了如何读取二进制文件中的数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <fstream>

struct Data {
int id;
double value;
};

int main() {
std::ifstream inFile("data.bin", std::ios::binary);
Data data;

if (!inFile) {
std::cerr << "无法打开文件!" << std::endl;
return 1; // 返回错误代码
}

while (inFile.read(reinterpret_cast<char*>(&data), sizeof(data))) {
std::cout << "ID: " << data.id << ", Value: " << data.value << std::endl;
}

inFile.close(); // 关闭文件
return 0;
}

以上代码中,我们同样使用 read 方法从 data.bin 中读取数据。每次读取操作将数据填充至 data 结构体中,直到文件结束。

总结

本文介绍了如何在 C++ 中进行文本文件和二进制文件的基本操作。通过 std::ifstreamstd::ofstream,我们可以轻松地实现文件的读写操作。

  • 文本文件
    • 使用 std::ofstream 写入文本
    • 使用 std::ifstream 读取文本
  • 二进制文件
    • 使用 std::ofstream 写入二进制数据
    • 使用 std::ifstream 读取二进制数据

掌握这些基本的文件读写操作后,你就可以在 C++ 中高效地处理文件数据了。希望你能在实际编程中应用这些技巧,期待下篇文章,我们将讨论文件的其他高级操作!

34 文本文件与二进制文件

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

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-24

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论