fstream ifsteam ofstream 介绍及其读写文件

fstream,ifstream和ofstream是C++标准库中的类,它们用于文件I/O操作。

fstream是一个基类,它同时具有继承自ifstream和ofstream的特征,可以同时进行输入和输出操作。

ifstream是从istream类派生的,专门用于输入文件。它从一个已打开的文件中读取数据,可以读取各种数据类型,包括字符、字符串、整数、浮点数等等。

ofstream是从ostream类派生的,专门用于输出文件。它向一个已打开的文件中写入数据,可以写入各种数据类型,包括字符、字符串、整数、浮点数等等。

使用这些类时,需要包含相应的头文件,例如使用ifstream类需要包含头文件。同时,也需要确保打开文件时已经指定了正确的文件路径和文件名。

举个栗子:

#include "iostream"
#include 
#include 

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;
}


水平有限,有问题随时交流;
欢迎一键三连!

你可能感兴趣的:(Cpp,c++)