C++小程序:读写二进制文件

       以二进制形式读写文件,是C++中读写文件的形式之一,步骤与存储读出文本文件基本相同,但也有需要注意之处。本文以小程序形式举例说明。

       相关步骤及代码、注释如下:
        一、头文件部分

#include <iostream>
#include <fstream>  // ofstream、ifstream类必须包含的头文件
#include <string>
using  namespace std;

        二、定义一个结构体作为二进制文件存取数据的类型

struct myStruct  
{
    char myChar[31];  //字符串
    int myInt; //整数  
};

            说明:此处之所以使用自定义结构体并使用char、int等基本类型,因为写入string类等类对象,其写入文件中的数据包括了动态开辟的指针,读取时容易出错。

三、定义全局数组变量,用于存储读取的数据

struct myStruct retData[3];

        四、写入磁盘子程序

void Write( myStruct* pMyStruct)
{
    string filename = "myData.dat"; //文件名
    ofstream ofs; //声明写文件对象
    ofs.open(filename, ios::out|ios::trunc | ios::binary);
      //参1 文件名 参2 写方式|清空文件或新建|二进制方式
    if (!ofs.is_open()) //检测是否正常打开
    {
        cout << "打开文件" << filename << "失败。\n";  
        return;
    }
    for (int i = 0; i < 3; i++) { //通过循环,依次存入各数据块
         ofs.write((const char*)pMyStruct, sizeof(myStruct));
         pMyStruct++;
    }
    ofs.close(); // 关闭文件
    cout << "以二进制方式写入文件操作完成。。。\n";
}

        五、从磁盘文件读取数据子程序

void Read()
{
    string filename = "myData.dat"; //文件名
    ifstream ifs; //声明读文件对象
    ifs.open(filename, ios::in | ios::binary);
       //参1 文件名 参2 读方式|二进制方式
    if (!ifs.is_open())
    {
        cout << "打开文件" << filename << "失败。\n";  
        return;
    }
    myStruct temp; 
    int n = 0;
    while (ifs.read((char*)&temp, sizeof(temp)))
        //依次读入文件中个数据块
    {
       strcpy(retData[n].myChar, temp.myChar);
          //此处若直接用等号赋值会报错:“表达式必须是可修改的左值错误”
       retData[n].myInt=temp.myInt;
       n++;
     }
    ifs.close();     // 关闭文件,fin对象失效前会自动调用close()。
    cout << "读取二进制文件操作完成。。。\n";
 }

        六、调用举例

int main()
{   myStruct data[3] = { {"天AAAA",100}, {"津BBBB",200}, {"市CCCC",300} };
    Write(data);
    Read();
    for (int i = 0; i < 3; i++)
    {
        cout << retData[i].myChar << "   " << retData[i].myInt << endl;
    }
    system("pause");
    return 0;
}

       七、执行结果
/*
以二进制方式存入文件操作完成。。。
读取二进制文件操作完成。。。
天AAAA   100
津BBBB   200
市CCCC   300
请按任意键继续. . .
*/

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值