fstream,ifstream和ofstream是C++标准库中的类,它们用于文件I/O操作。
fstream是一个基类,它同时具有继承自ifstream和ofstream的特征,可以同时进行输入和输出操作。
ifstream是从istream类派生的,专门用于输入文件。它从一个已打开的文件中读取数据,可以读取各种数据类型,包括字符、字符串、整数、浮点数等等。
ofstream是从ostream类派生的,专门用于输出文件。它向一个已打开的文件中写入数据,可以写入各种数据类型,包括字符、字符串、整数、浮点数等等。
使用这些类时,需要包含相应的头文件,例如使用ifstream类需要包含<fstream>头文件。同时,也需要确保打开文件时已经指定了正确的文件路径和文件名。
举个栗子:
#include "iostream"
#include <string>
#include <fstream>
using namespace std;
// 利用ofstream 对文件进行write操作;
// 定义一个名为 ofstream_files 的函数,该函数接受一个 string 类型的参数 files
void ofstream_files(string files){
// 创建一个 ofstream 对象,名为 outf,打开由参数 files 指定的文件,并以输出模式打开(即如果文件存在则清空内容,如果文件不存在则创建新文件)
std::ofstream outf(files, std::ios::out);
// 定义一个字符串变量,名为 str,并初始化为 "scores-------------:"
std::string str = "scores-------------:";
// 检查文件是否成功打开(即 is_open() 函数返回 true)
if (outf.is_open()) {
// 如果文件成功打开,则向文件写入一行字符串和两个浮点数(0.9 和 0.8),两者之间以空格分隔,行末添加换行符
outf << str + " " + std::to_string(0.9) + "\n";
outf << str + " " + std::to_string(0.8) + "\n";
// 写入完成后关闭文件
outf.close();
} else {
// 如果文件无法打开(即 is_open() 函数返回 false),则向控制台输出一条消息:"Unable to open file"
std::cout << "Unable to open file";
}
}
// 利用ifstream getline对文件进行read操作;
// 定义一个名为 ifstream_files_1 的函数,该函数接受一个 string 类型的参数 files
void ifstream_files_1(string files)
{
// 输出消息到控制台,表示此函数开始执行
cout << "ifstream_1---------------------------" << endl;
// 创建一个 ifstream 对象,名为 inf,打开由参数 files 指定的文件,并以输入模式打开(即只能读取文件,不能写入文件)
std::ifstream inf(files, std::ios::in);
// 检查文件是否成功打开(即 is_open() 函数返回 true)
if (inf.is_open())
{
// 定义一个字符串变量,用于逐行读取文件内容
std::string line;
// 使用 getline 函数从文件中逐行读取内容,直到到达文件末尾
while (std::getline(inf, line)) {
// 将读取到的每一行内容输出到控制台
std::cout << line << std::endl;
}
// 读取完成后关闭文件
inf.close();
}
}
// 利用ifstream 插入符 对文件进行read操作;
void ifstream_files_2(string files){
// 创建一个 ifstream 对象,名为 inf,打开由参数 files 指定的文件,并以输入模式打开(即只能读取文件,不能写入文件)
std::ifstream inf(files, std::ios::in);
// 输出消息到控制台,表示此函数开始执行
cout << "ifstream_2---------------------------" << endl;
// 检查文件是否成功打开(即 is_open() 函数返回 true)
if(inf.is_open()){
// 循环读取文件直到到达文件末尾
while(!inf.eof()) {
// 声明一个字符串变量 s
// int v;
string s;
// 从文件中读取一个字符串到s变量中
inf >> s;
// 将 s 变量的内容输出到控制台
std::cout << s << endl;
}
}
// 读取完成后关闭文件
inf.close();
}
void fstream_pro(string exam_file)
{
std::fstream file(exam_file, std::ios::in | std::ios::out); // 以输入/输出方式打开文件
std::string line;
if (!file.is_open()){
cout << "failed";
}
while (std::getline(file, line)) { // 逐行读取
std::cout << line << "read line over\n"; // 输出每一行
// string str = "read over!";
//
}
file.close(); // 关闭文件
std::fstream sfile(exam_file, std::ios::app); // 以输入/输出方式打开文件
sfile << "read" << endl; // 写入字符串到文件
sfile << "over" << endl; // 写入字符串到文件
sfile.close(); // 关闭文件
}
int main()
{
//对example.txt 文件进行操作
string file = "./exam.txt";
// ofstream
ofstream_files(file);
// // ifstream
ifstream_files_1(file);
ifstream_files_2(file);
// fstream
fstream_pro(file);
return 0;
}
水平有限,有问题随时交流;
欢迎一键三连!