欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 文件操作(二进制文件)

文件操作(二进制文件)

2025/4/18 23:20:48 来源:https://blog.csdn.net/nohesitation/article/details/147280125  浏览:    关键词:文件操作(二进制文件)

        C++中对文件操作需要包含头文件  #include<fstream>
文件类型分为两类:


        1. 文本文件:文件以文本对应的 ASCII 码形式存储在计算机中
        2. 二进制文件:文件以文本的二进制形式存储在计算机中,用户一 般不能直接读懂


文件的主要操作:


                1. ofstream :写操作
                2. ifstream :读操作
                3. fstream :读写操作

文件打开方式

        注意:文件打开方式可以配合使用,利用|操作符

        例如:用二进制方式写文件 ios::binary | ios::out

二进制文件

        以二进制的方式对文件进行读写操作。打开方式要指定 ios::binary

        写文件

步骤:

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

        实例

#include<iostream>
//1、包含头文件
#include<fstream>using namespace std;//二进制文件-写文件
class Person
{
public:char m_name[64];int m_age;
};void test01()
{//2、3: 创建流对象,打开文件的操作可以在这一步一起完成ofstream ofs("person.txt", ios::out | ios::binary);//4、写文件Person p = {"Tom", 18};ofs.write((const char *)&p, sizeof(Person));//5、关闭文件ofs.close();
}int main()
{test01();return 0;
}
        头文件包含

        #include<fstream>:引入文件输入输出流库,用于文件的读写操作。

        定义person类
class Person
{
public:char m_name[64];int m_age;
};

        公有成员变量:m_name:一个长度为 64 的字符数组,用于存储人的姓名。

        定义test01函数
void test01()
{ofstream ofs("person.txt", ios::out | ios::binary);Person p = {"Tom", 18};ofs.write((const char *)&p, sizeof(Person));ofs.close();
}

        ofstream ofs("person.txt", ios::out | ios::binary); 

        创建一个 ofstream 对象 ofs,用于以输出模式(ios::out二进制模式(ios::binary打开文件 person.txt(第一个带“”中间的参数)如果文件不存在,会创建该文件;如果文件已存在,会清空文件内容。同时这一步也打开了文件。

        Person p = {"Tom", 18};

        创建一个 Person 类的对象 p,并初始化其成员变量 m_name 为 "Tom"m_age 为 18

        ofs.write((const char *)&p, sizeof(Person)); 

        使用 write 函数将对象 p 的二进制数据写入到文件中(const char *)&p 将 p 的地址强制转换为 const char * 类型,sizeof(Person) 表示要写入的数据的字节数。

        ofs.close();

        关闭文件,释放相关资源

        注:介绍一下write函数:

        在 C++ 里,write 函数是 ostream 类(ofstream 是它的派生类)的成员函数,主要用于以二进制形式把数据写入文件

        函数原型

ostream& write (const char* s, streamsize n);

        s:这是一个指向要写入的数据的指针,其类型为 const char*要是要写入的是其他类型的对象,就得把对象的地址强制转换为 const char* 类型

        n:表示要写入的字节数,通常使用 sizeof 运算符来获取对象的大小。

        返回值:返回一个指向调用该函数的 ostream 对象的引用,这就允许进行链式调用。

        读文件

        二进制方式读文件主要利用流对象调用成员函数 read

        函数原型:istream& read(char * buffer, int len);

        参数解释:字符指针 buffer 指向内存中一段存储空间, len 是读写的字节数。

        实例

#include<iostream>
//1、包含头文件
#include<fstream>
using namespace std;
//二进制文件-读文件
class Person
{
public:char m_name[64];int m_age;
};void test01()
{//2、创建流对象,打开文件的操作可以在这一步一起完成ifstream ifs;//3、打开文件,判断文件是否打开成功ifs.open("person.txt", ios::in | ios::binary);if (!ifs.is_open()){cout << "failure" << endl;return;}else{cout << "success" << endl;}//4、读文件Person p;ifs.read((char *)&p, sizeof(Person));cout << "name:" << p.m_name << endl;cout << "age:" << p.m_age << endl;//5、关闭文件ifs.close();
}int main()
{test01();return 0;
}

        #include<fstream>:包含文件输入输出流库,用于文件的读写操作。

        Person 类的定义
class Person
{
public:char m_name[64];int m_age;
};

        定义了一个名为 Person 的类,该类有两个公有成员变量:

  • m_name:一个长度为 64 的字符数组,用于存储人的姓名。
  • m_age:一个整数类型的变量,用于存储人的年龄。
        test01函数
void test01()
{//2、创建流对象,打开文件的操作可以在这一步一起完成ifstream ifs;//3、打开文件,判断文件是否打开成功ifs.open("person.txt", ios::in | ios::binary);if (!ifs.is_open()){cout << "failure" << endl;return;}else{cout << "success" << endl;}//4、读文件Person p;ifs.read((char *)&p, sizeof(Person));cout << "name:" << p.m_name << endl;cout << "age:" << p.m_age << endl;//5、关闭文件ifs.close();
}
         流对象的创建
ifstream ifs;

        创建一个 ifstream 类型的对象 ifsifstream 是用于从文件中读取数据的输入文件流类。

        文件的打开与状态检查
ifs.open("person.txt", ios::in | ios::binary);if (!ifs.is_open())
{cout << "failure" << endl;return;
}
else
{cout << "success" << endl;
}

        ifs.open("person.txt", ios::in | ios::binary);:尝试以二进制输入模式打开名为 person.txt 的文件。ios::in 表示输入模式,ios::binary 表示以二进制方式进行读写。同时,打开文件的操作也在这一步完成。

        ifs.is_open():检查文件是否成功打开。如果文件打开失败,输出 "failure" 并返回;如果打开成功,输出 "success"

        数据的读取与输入
Person p;ifs.read((char *)&p, sizeof(Person));cout << "name:" << p.m_name << endl;
cout << "age:" << p.m_age << endl;

        Person p;:创建一个 Person 类的对象 p,用于存储从文件中读取的数据。

  ifs.read((char *)&p, sizeof(Person));:使用 read 函数从文件中读取数据。(char *)&p 是将 p 对象的地址强制转换为 char* 类型,sizeof(Person) 表示要读取的字节数,即 Person 类对象的大小。

        最后,将读取到的 p 对象的 m_name 和 m_age 成员变量的值输出到控制台。

        注:介绍一下read函数:

        在 C++ 里,read 函数是 istream 类(ifstream 是它的派生类)的成员函数,主要用于以二进制形式从文件里读取数据

        函数原型:

istream& read (char* s, streamsize n);

        s:这是一个指向用于存储读取数据的内存块的指针,类型为 char*。若要读取的数据是其他类型的对象,就得把对象的地址强制转换为 char* 类型

        n:表示要读取的字节数,通常使用 sizeof 运算符来获取对象的大小。

        返回值:返回一个指向调用该函数的 istream 对象的引用,这就允许进行链式调用。

        文件关闭
ifs.close();

        关闭文件,释放相关的系统资源。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词