C++读写文件流实例程序讲解
1. 概述
C++中,通过文件流(fstream)可以方便地进行文件读写操作。文件流不仅可以读写文本文件,还可以读写二进制文件。对于程序开发中需要处理的大量数据,文件读写操作显得尤为重要。
本文将详细讲解如何在C++中使用文件流进行文件读写操作。
2. 文件流的基本操作
C++文件流中,主要有三种文件流类型:ifstream、ofstream和fstream,分别对应文件的读、写和读写操作。下面以对文本文件进行读写操作为例,来介绍文件流的基本操作。
2.1 文件读操作
使用ifstream实例化文件流对象,可以实现对文本文件的读操作。一个基本的文件读取流程如下:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 创建文件流对象
ifstream inFile;
// 打开文件
inFile.open("test.txt");
// 对文件进行操作
if (inFile.is_open()) {
string line;
while (getline(inFile, line)) {
cout << line << endl;
}
// 关闭文件
inFile.close();
}
return 0;
}
上述示例代码中,我们先创建了一个ifstream类型的文件流对象inFile,然后使用inFile.open()方法打开了一个名为test.txt的文本文件。在打开文件之后,我们使用了getline()方法逐行读取了文件中的内容,并将读取到的内容输出到终端上。
2.2 文件写操作
使用ofstream实例化文件流对象,可以实现对文本文件的写操作。一个基本的文件写入流程如下:
#include <fstream>
#include <iostream>
using namespace std;
int main() {
// 创建文件流对象
ofstream outFile;
// 打开文件
outFile.open("test.txt");
// 对文件进行操作
if (outFile.is_open()) {
outFile << "Hello, World!" << endl;
// 关闭文件
outFile.close();
}
return 0;
}
上述示例代码中,我们先创建了一个ofstream类型的文件流对象outFile,然后使用outFile.open()方法打开了一个名为test.txt的文本文件。在打开文件之后,我们使用了outFile << "Hello, World!" << endl;的方式向文件中写入了一行文本内容。
2.3 读写操作
除了以上基本操作之外,还可以使用fstream实例化文件流对象,实现对文本文件的读写操作。一个基本的文件读写流程如下:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// 创建文件流对象
fstream file;
// 打开文件
file.open("test.txt", ios::in | ios::out);
// 对文件进行操作
if (file.is_open()) {
string line;
while (getline(file, line)) {
cout << line << endl;
}
file << "Hello, World!" << endl;
// 关闭文件
file.close();
}
return 0;
}
上述示例代码中,我们创建了一个fstream类型的文件流对象,然后使用file.open()方法打开了一个名为test.txt的文本文件,并指定了ios::in | ios::out的标志,表示该文件能够进行读写操作。在打开文件之后,我们使用了getline()方法逐行读取了文件中的内容,并将读取到的内容输出到终端上。此外,我们还使用了file << "Hello, World!" << endl;的方式向文件中写入了一行文本内容。
3. 二进制文件读写操作示例
除了文本文件之外,文件流还可以实现对二进制文件的读写操作。二进制文件读写操作函数与文本文件的操作函数类似,只是需要指定不同的文件流类型。
下面的示例代码演示了如何使用文件流读写二进制文件:
#include <iostream>
#include <fstream>
using namespace std;
struct Point {
float x;
float y;
};
int main() {
// 创建文件流对象
fstream file;
// 打开文件
file.open("points.bin", ios::binary | ios::in | ios::out | ios::trunc);
if (file.is_open()) {
// 写入数据
Point p1 = {1.0f, 2.0f};
file.write((char*) &p1, sizeof(Point));
// 读取数据
file.seekg(0, ios::beg);
Point p2;
file.read((char*) &p2, sizeof(Point));
cout << "p2 = (" << p2.x << ", " << p2.y << ")" << endl;
// 关闭文件
file.close();
}
return 0;
}
上述示例代码中,我们创建了一个fstream类型的文件流对象file,然后使用file.open()方法打开了一个名为points.bin的二进制文件,并指定了ios::binary、ios::in、ios::out和ios::trunc的标志,表示该文件能够进行二进制读写操作,并在打开文件时清空了原有的文件内容。
在打开文件之后,我们使用了file.write()方法向文件中写入了一个Point类型的结构体。接着我们使用file.seekg()方法将读写指针移动到文件开头,并通过file.read()方法读取了该结构体,并将读取到的结构体内容输出到终端上。
4. 总结
C++中,文件的读写操作常常是我们需要面对的场景,而通过文件流的方式可以非常方便地进行文件读写操作。在使用文件流时,需要注意文件类型及文件操作权限,并及时关闭文件流。
同时,在进行二进制文件读写操作时,需要注意结构体的内存对齐问题,避免因内存对齐导致数据读写错误问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++读写文件流实例程序讲解 - Python技术站