• 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 类型。

  • 相关阅读:
    C++ Reference: Standard C++ Library reference: Containers: array: array: rend
    git diff与linux diff的输出格式之unified format
    450-深信服面经1
    亚马逊云科技re:Invent 2022 Ruba Borno主题演讲
    河南工程学院2022级新生周赛(五)题解
    Zookeeper概述
    常见限流算法
    在排列中求lcs
    实训二十一:RIP2被动接口
    软件设计与体系结构简答题汇总
  • 原文地址:https://blog.csdn.net/woshizuopie/article/details/126079053