​C++学习系列内容汇总​ ​。


  • ​1. 文件操作概述​
  • ​2. 文本文件​
  • 2.1 写文件
  • 2.2 读文件

  • ​3. 二进制文件​
  • 3.1 写文件
  • 3.2 读文件

  • ​4. 总结​
  • 1. 文件操作概述

    到目前为止,我们已经使用了iostream标准库,它提供了cin和cout方法分别用于从标准输入读取流和向标准输出写入流。当实现从文件读取流和向文件写入流时,就需要用到C++中另一个 标准库fstream ,它定义了三个新的数据类型:

    数据类型

    描述

    ofstream

    该数据类型表示输出文件流,用于创建文件并向文件写入信息。

    ifstream

    该数据类型表示输入文件流,用于从文件读取信息。

    fstream

    该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

    程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过 文件 可以将数据持久化。

    C++中对文件操作需要包含头文件 ​ ​<fstream>;​ ​。

    文件类型 分为两种:1. 文本文件 :文件以文本的 ASCII码 形式存储在计算机中;

    2. 二进制文件 :文件以文本的 二进制 形式存储在计算机中,用户一般不能直接读懂它们。

    操作文件的三大类: 1. ofstream:写操作

    2. ifstream: 读操作

    3. fstream : 读写操作

    2. 文本文件

    2.1 写文件

    写文件的步骤 如下:

    1. 包含头文件:​ ​#include <fstream>​
    2. 创建流对象:​ ​ofstream ofs;​
    3. 打开文件:​ ​ofs.open("文件路径", 打开方式);​
    4. 写数据:​ ​ofs << "写入的数据";​
    5. 关闭文件:​ ​ofs.close();​

    文件的 打开方式

    打开方式

    解释

    ios::in

    打开文件用于读取

    ios::out

    打开文件用于写入

    ios::ate

    文件打开后定位到文件末尾

    ios::app

    所有写入都追加到文件末尾

    ios::trunc

    如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为0

    ios::binary

    二进制方式

    注意: 文件打开方式可以配合使用,利用​ ​|​ ​操作符。例如,用二进制方式写文件 ​ ​ios::binary | ios:: out​ ​。

    实例如下所示。

    #include<iostream>
    using namespace std;
    #include<fstream>

    //文本文件——写文件
    void test01()
    {
    //1. 包含头文件 fstream

    //2. 创建流对象
    ofstream ofs;

    //3. 指定打开方式
    ofs.open("test.txt", ios::out);

    //4. 写内容
    ofs << "姓名:张三" << endl;
    ofs << "性别:男" << endl;
    ofs << "年龄:18" << endl;

    //5. 关闭文件
    ofs.close();
    }

    int main()
    {
    test01();

    system("pause");

    return 0;
    }

    效果如下所示。

    C++核心编程(五)—— 文件操作_编程开发

    总结: 1. 文件操作必须包含头文件fstream;

    2. 读文件可以利用ofstream或fstream类;

    3. 打开文件时候需要指定操作文件的路径,以及打开方式;

    4. 利用​ ​<<​ ​可以向文件中写数据;

    5. 操作完毕,要关闭文件.

    2.2 读文件

    读文件与写文件步骤相似,但是读取方式相对于比较多。

    读文件的步骤 如下:

    1. 包含头文件:​ ​#include <fstream>​
    2. 创建流对象:​ ​ifstream ifs;​
    3. 打开文件并判断文件是否打开成功:​ ​ifs.open("文件路径",打开方式);​
    4. 读数据:四种方式读取
    5. 关闭文件:​ ​ifs.close();​

    实例如下所示。

    #include<iostream>
    using namespace std;
    #include<fstream>
    #include<string>

    //文本文件——读文件
    void test01()
    {
    //1. 包含头文件 fstream

    //2. 创建流对象
    ifstream ifs;

    //3. 打开文件,并判断是否打开成功
    ifs.open("test.txt", ios::in);

    if (!ifs.is_open()) //判断是否打开成功
    {
    cout << "文件打开失败!" << endl;
    return;
    }

    //4. 读数据:共有四种方式
    //第一种
    //char buf[1024] = { 0 }; //字符数组
    //while (ifs >> buf)
    //{
    // cout << buf << endl;
    //}

    //第二种
    //char buf[1024] = { 0 };
    //while (ifs.getline(buf, sizeof(buf)))
    //{
    // cout << buf << endl;
    //}

    //第三种
    //string buf;
    //while (getline(ifs, buf))
    //{
    // cout << buf << endl;
    //}

    //第四种(不推荐)
    char c;
    while ((c = ifs.get()) != EOF) //EOF: end of file
    {
    cout << c;
    }

    //5. 关闭文件
    ifs.close();
    }

    int main()
    {
    test01();

    system("pause");

    return 0;
    }

    姓名:张三

    性别:男

    年龄:18

    总结: 1. 读文件可以利用ifstream ,或者fstream类;

    2.利用is_open函数可以判断文件是否打开成功;

    3. close关闭文件 。

    3. 二进制文件

    以二进制的方式对文件进行读写操作,打开方式要指定为​ ​ios::binary​ ​。

    3.1 写文件

    二进制方式写文件 主要利用流对象调用成员函数write。

    write函数原型 : ​ostream& write(const char * buffer,int len);​

    参数解释: 字符指针buffer指向内存中一段存储空间,len是读写的字节数。

    实例如下所示。

    #include<iostream>
    using namespace std;
    #include<fstream>

    //二进制文件——写文件
    class Person
    {
    public:
    char m_Name[64]; //姓名(字符数组代表字符串,C++的string字符串会有些问题)
    int m_Age; //年龄
    };


    void test01()
    {
    //1. 包含头文件

    //2. 创建流对象
    ofstream ofs("person.txt", ios::out | ios::binary);

    //3. 打开文件
    //ofs.open("person.txt", ios::out | ios::binary); //也可以在创建对象流的时候,指定所有方式

    //4. 写文件
    Person p = { "张三", 18 };
    ofs.write((const char *)&p, sizeof(Person)); //(const char *) &p 对数据p取地址,并强转为const char型

    //5. 关闭文件
    ofs.close();
    }

    int main()
    {
    test01();

    system("pause");

    return 0;
    }

    效果如下所示。

    C++核心编程(五)—— 文件操作_编程开发_02

    总结: 文件输出流对象可以通过write函数,以二进制方式写数据。

    3.2 读文件

    二进制方式读文件 主要利用流对象调用成员函数read。

    read函数原型: ​istream& read(char *buffer,int len);​

    参数解释: 字符指针buffer指向内存中一段存储空间,len是读写的字节数。

    实例如下所示。

    #include<iostream>
    using namespace std;
    #include<fstream>

    //二进制文件——读文件
    class Person
    {
    public:
    char m_Name[64]; //姓名
    int m_Age; //年龄
    };


    void test01()
    {
    //1. 包含头文件

    //2. 创建流对象
    ifstream ifs;

    //3. 打开文件,并判断文件是否打开成功
    ifs.open("person.txt", ios::in | ios::binary);

    if (!ifs.is_open())
    {
    cout << "文件打开失败!" << endl;
    return;
    }

    //4. 读文件
    Person p;
    ifs.read((char *)&p, sizeof(Person));
    cout << "姓名:" << p.m_Name << " 年龄:" << p.m_Age << endl;

    //5. 关闭文件
    ifs.close();
    }

    int main()
    {
    test01();

    system("pause");

    return 0;
    }

    姓名:张三  年龄:18

    总结: 文件输入流对象可以通过read函数,以二进制方式读数据。

    4. 总结

    C++核心编程(五)—— 文件操作_C  开发_03

    1.Vue3【核心概念(Actions续集、插件、本地存储)、解构赋值响应式、Pinia热更新、核心概念、Pinia的数据持久化插件】(十五)-全面详解(学习总结---从入门到深化) 2.Java设计模式之工厂模式 3.C++ 20 协程总结 4.[全程建模]用例图中角色与包之间的关系 5.[全程建模]use关系怎么没了?