• C++基础知识(十一)--- 文件读写


    目录

    一. 文件流类和文件流对象

    二. 打开文件

    三. 写文件

    四. 读文件

    五. 二进制读写


    一. 文件流类和文件流对象

    输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。

    和文件有关系的输入输出类主要在fstream.h这个头文件中被定义,在这个头文件中主要被定义了三个类,由这三个类控制对文件的各种输入输出操作,他们分别是ifstream、ofstream、fstream,其中fstream类是由iostream类派生而来,他们之间的继承关系见下图:

     由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,所以它在fstream头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。

    • fstream类,它是从iostream类派生的,用来支持对磁盘文件的输入输出。
    • ifstream类,是从istream类派生的,用来支持从磁盘文件的输入。
    • ofstream类,是从ostream类派生的,用来支持向磁盘文件的输出。

    二. 打开文件

    打开文件是指:

    为文件流对象和指定的磁盘文件建立关联,以便使文件流流向指定的磁盘文件;

    指定文件的工作方式,如:该文件是作为输入文件还是输出文件,是ASCII文件还是二进制文件。

    打开方式:

    第二行是调用输出文件流的成员函数open打开磁盘文件niubi.c,并指定它为输出文件,文件流对象ofs将向niubi.c输出数据。简单的讲,就是niubi.c作为一个输出文件,接收从内存输出的数据。

    在定义文件流对象时指定参数:

    方式作用
    ios::in以输入方式打开文件
    ios::out以输出方式打开文件(默认方式),如已有此名字的文件,则将其原有内容全部清除。
    ios::app以输出方式打开文件,写入的数据添加在文件末尾
    ios::trunc打开一个文件,如果文件已存在,则删除其全部数据,如不存在,则建立新文件。
    ios::binary以二进制方式打开一个文件,如不指定此方式则默认为ASCII方式
    ios::in | ios::out以输入和输出方式打开文件,文件可读可写
    ios::out | ios::binary以二进制方式打开一个输出文件

    三. 写文件

    四. 读文件

    五. 二进制读写

    1. class Maker
    2. {
    3. public:
    4. Maker()
    5. {}
    6. Maker(const char* name,int age)
    7. {
    8. this->age = age;
    9. //this->name = name; //err
    10. strcpy(this->name, name);
    11. }
    12. public:
    13. char name[64];
    14. int age;
    15. };
    16. //写文件
    17. void test9()
    18. {
    19. Maker m1("sun",18);
    20. Maker m2("ha",20);
    21. ofstream ofs;
    22. ofs.open("text.txt", ios::out | ios::trunc | ios::binary);
    23. if (!ofs.is_open())
    24. {
    25. cout << "open fail" << endl;
    26. }
    27. ofs.write((const char*)&m1, sizeof(Maker));
    28. ofs.write((const char*)&m2, sizeof(Maker));
    29. ofs.close();
    30. }
    31. //读文件
    32. void test10()
    33. {
    34. ifstream ifs;
    35. ifs.open("text.txt", ios::in | ios::binary);
    36. if (!ifs.is_open())
    37. {
    38. cout << "open fail" << endl;
    39. }
    40. Maker m1,m2;
    41. ifs.read((char*)&m1, sizeof(Maker));
    42. ifs.read((char*)&m2, sizeof(Maker));
    43. cout << "Name:" << m1.name << " Age:" << m1.age << endl;
    44. cout << "Name:" << m2.name << " Age:" << m2.age << endl;
    45. }

    注意:

    当文件读写时,类中的成员变量 string 类型。

  • 相关阅读:
    分享一个生产者-消费者的真实场景
    无涯教程-JavaScript - CONVERT函数
    【数据分析】2020年北京交通大学计算机学院学术型博士录取数据分析
    HTML 布局
    simulink平面五杆机构运动学仿真
    护眼灯是减蓝光好还是无蓝光好?教育部认可的护眼灯品牌
    从0到1学SpringCloud——10 springboot集成redis缓存
    【学习笔记】构造
    纯函数 和 函数柯里化 ( 函数式编程 )05
    c++头文件模板
  • 原文地址:https://blog.csdn.net/woshizuopie/article/details/126079053