C++面向对象-28-读写二进制文件

前面学习了对文本文件的读写操作,有了这个基础,我们来学习下,C++对二进制文件的读写操作。因为是二进制,所以不管是读还是写文件,其中打开方式要指定为iso::binary。

 

1.写二进制文件
二进制方式写文件主要利用流对象调用成员函数write()
函数原型:ostream& write(const char * buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数

来看一个代码例子

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

class Person
{
public:
    string m_Name;
    int m_Age;

};

void test01()
{
    ofstream ofs;

    ofs.open("test1.txt", ios::out | ios::binary);

    Person p = {"Anthony", 28};
    ofs.write( (const char *)&p, sizeof(p));

    ofs.close();

}

int main()
{
    test01();
    system("pause");
    return 0;
}

运行之后,在代码同目录下有一个test1.txt

一般二进制内容打开就是乱码,接下来我们学习读二进制文件,读出来然后打印到控制台内容就清楚了。

 

2.读二进制文件

二进制方式读文件主要利用流对象调用成员函数read()
函数原型:istream& read(char *buffer, int len);
参数解释:字符指针buffer指向内存中一段内存空间,len是读写的字节数

直接读取上面代码产生的test1.txt文件

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

class Person
{
public:
    string m_Name;
    int m_Age;

};


void test01()
{
    ifstream ifs;  //把二进制文件内容Input到我们程序,所以需要使用input file stream

    ifs.open("test1.txt", ios::in | ios::binary);

    if(!ifs.is_open())
    {
        cout << "文件打开失败!" << endl;
        return;
    }
   
    //读出来
    Person p;
    ifs.read((char *)&p, sizeof(Person));
    cout << "姓名:" << p.m_Name << endl;
    cout << "年龄:" << p.m_Age << endl;

    ifs.close();

}

int main()
{
    test01();
    system("pause");
    return 0;
}

运行控制台输出

 

总结:

二进制读文件,使用流对象的read()函数,写文件,使用流对象的write方法,其中读写方法的两个参数的含义是一样的,第一个参数指针这块,需要强制转换成函数的类型。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章