在 C++ 中,文件处理是一个常见且重要的任务。标准库提供了三种主要的文件流类来处理文件输入和输出:fstream
、ifstream
和 ofstream
。这些类都在 <fstream>
头文件中定义。
一、fstream
类
fstream
是文件流类的基类,既可以用于读操作,也可以用于写操作。它结合了 ifstream
和 ofstream
的功能。如果你需要对同一个文件进行读写操作,fstream
是最佳选择。
1.1 基本用法
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::fstream file;
// 打开文件
file.open("example.txt", std::ios::in | std::ios::out | std::ios::app);
if (!file) {
std::cerr << "Failed to open file." << std::endl;
return 1;
}
// 写入文件
file << "Hello, fstream!" << std::endl;
// 读取文件
std::string line;
file.seekg(0); // 移动读指针到文件开始
while (getline(file, line)) {
std::cout << line << std::endl;
}
// 关闭文件
file.close();
return 0;
}
1.2 打开模式
fstream
支持多种打开模式,可以组合使用:
std::ios::in
:以读模式打开文件std::ios::out
:以写模式打开文件std::ios::app
:以追加模式打开文件std::ios::ate
:打开文件并定位到文件末尾std::ios::trunc
:如果文件存在,则清空文件std::ios::binary
:以二进制模式打开文件
二、ifstream
类
ifstream
是输入文件流类,专门用于文件读操作。它继承自 istream
,并添加了文件输入操作的功能。
2.1 基本用法
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream file("example.txt");
if (!file) {
std::cerr << "Failed to open file." << std::endl;
return 1;
}
std::string line;
while (getline(file, line)) {
std::cout << line << std::endl;
}
file.close();
return 0;
}
2.2 打开模式
std::ios::in
:以读模式打开文件(默认模式)std::ios::binary
:以二进制模式打开文件
三、ofstream
类
ofstream
是输出文件流类,专门用于文件写操作。它继承自 ostream
,并添加了文件输出操作的功能。
3.1 基本用法
#include <iostream>
#include <fstream>
int main() {
std::ofstream file("example.txt");
if (!file) {
std::cerr << "Failed to open file." << std::endl;
return 1;
}
file << "Hello, ofstream!" << std::endl;
file.close();
return 0;
}
3.2 打开模式
std::ios::out
:以写模式打开文件(默认模式)std::ios::app
:以追加模式打开文件std::ios::ate
:打开文件并定位到文件末尾std::ios::trunc
:如果文件存在,则清空文件std::ios::binary
:以二进制模式打开文件
四、总结
fstream
:用于同时读写文件。ifstream
:用于读取文件。ofstream
:用于写入文件。
正确选择和使用这些文件流类,可以有效地处理各种文件输入输出操作。掌握打开模式以及流的基本操作,是进行文件处理的基础。在实际开发中,根据具体需求选择合适的文件流类,可以提高代码的可读性和维护性。