二进制文件的读写操作

二进制文件不是以 ASCII 代码存放数据的,它将内存中数据存储形式不加转换地传送到

磁盘文件,因此它又称为内存数据的映像文件。因为文件中的信息不是字符数据,而是字节

中的二进制形式的信息,因此它又称为字节文件。

对二进制文件的操作需要先打开文件,用完后要关闭文件。在打开时要用 ios::binary

指定为以二进制形式传送和存储。二进制文件除了可以作为输入文件或输出文件外,还可以

是既能输入又能输出的文件。这是和 ASCII 文件不同的地方。

 

用成员函数 read 和 write 读写二进制文件:

对二进制文件的读写主要用 istream 类的成员函数 read 和 write 来实现。这两个成员函

数的原型为

istream& read(char *buffer,int len);

ostream& write(const char * buffer,int len);

字符指针 buffer 指向内存中一段存储空间。len 是读写的字节数。调用的方式为:

a. write(p1,50);

b. read(p2,30);

上面第一行中的 a 是输出文件流对象,write 函数将字符指针 p1 所给出的地址开始的 50 个

字节的内容不加转换地写到磁盘文件中。在第二行中,b 是输入文  件流对象,read  函数从

b 所关联的磁盘文件中,读入 30 个字节(或遇 EOF 结束),存放在字符指针 p2 所指的一段空

间内。

        class Student

{

public:

        Student(int i, char n[15]) { id = i; strcpy_s(name,strlen(n)+1,n); };

        ~Student() {}

        void printT() {

        cout << id << ends << name << endl;

        }

private:

        int id;

        char name[15];

};

void main(){

    //写操作

ofstream fout("Student_Infor.dat",ios::out |ios::binary);

    if (!fout)

    {

        cout << "Unable to open " << endl;

        abort();

    }

    Student S1(1, "Mr");

    Student S2(2, "Miss");

    Student S3(3, "Jack");

    Student S4(4, "Marry");

    Student S5(5, "Like");

    Student S6(6, "Famry");

    char s = '\n';

    fout.write((char *)&S1, sizeof Student);

    fout.write((char *)&S2, sizeof Student);

    fout.write((char *)&S3, sizeof Student);

    fout.write((char *)&S4, sizeof Student);

    fout.write((char *)&S5, sizeof Student);

    fout.write((char *)&S6, sizeof Student);

    fout.close();

    //读操作

    ifstream fin("Student_Infor.dat",ios::in | ios::binary);

    if (!fin)

    {

        cout << "Unable to open " << endl;

        abort();

    }

    Student S(0,"0");

    while (!fin.eof())

    {

        fin.read((char *)&S, sizeof(Student));

        if (fin.eof())break;

        S.printT();

}

}

二进制文本:

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值