fstream二进制存取

#include <iostream> 

#include <fstream> 

using namespace std; 

struct staff 

{ 

    int num; 

    char name[10]; 

    int age; 

    float salary; 

}; 



int main() 

{ 

    fstream iofile;

    iofile.open("file.dat",fstream::in|fstream::out|fstream::binary); //换成ios::也可以!

    // 以二进制格式存取结构体,I / O一起!
    //c的结构体语法: struct staff s[5]={} 

    //cout<<iofile.tellg()<<endl;//测试当前的文件指针位置

    staff out1, s[5] = //定义一个结构体

    {

        {1,"aaa",20,8000},

        {2,"bbb",21,9000},

        {3,"ccc",22,10000},

        {4,"ddd",23,12000},

        {5,"eee",24,14000}

    }; 

    for(int i=0;i<5;i++)

    { 

        //iofile.read((char*)&out1,sizeof(out1));

        cout<<"num: "<<s[i].num<<"  name: "<<s[i].name

        <<"  age: "<<s[i].age<<"  salary: "<<s[i].salary<<endl;

    }

    if(!iofile) 

    { 

        cout <<"open error" <<endl; 

        abort(); 

    } 

    for(int i=0;i <5;i++) 

    { 

        iofile.write((char*)&s[i],sizeof(s[i])); 

    } 



    //cout<<iofile.tellg()<<endl;// 现在文件指针位置已经不是开头了, 是120!

    iofile.seekg (0, ios::beg);//要注意的是,你存完文件后, 文件指针不再定位在文件头,

    // 可以使用cout<<iofile.tellg()<<endl;查看 当前文件指针位置 

    // 需要使用seekg将

    // 指针定位到文件头, 以便之后的读取, 否则会乱码!(不信,去掉这句试试!!!!) 



    cout<<endl;// 分隔开输入输出!

    for(int i=0;i<5;i++)

    {         

        iofile.read((char*)&out1,sizeof(out1));

        cout<<"num: "<<out1.num<<"  name: "<<out1.name

        <<"  age: "<<out1.age<<"  salary: "<<out1.salary<<endl;

    } 



    iofile.close(); // 关闭文件

    system("PAUSE"); // DEV C++编译器,没办法,得看结果,呵呵!

    return 0; 

} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值