使用C++的文件流对象读写二进制数据文件

本文介绍如何使用VS2022创建C++项目,并通过标准C++文件流对象实现二进制数据的读写。通过定义结构体并在文件中写入和读取该结构体实例,演示了基本的数据读写过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过在VS2022中创建一个项目,展示通过标准C++的文件流对象读写二进制数据文件。

在VS2022中创建C++空项目,

 

点击“创建”,完成空项目的创建。

在解决方案资源管理器视图中,右键单击项目名、添加、新建项,

添加名为“MyProject.cpp”的文件。

 

在文件中添加如下代码: 

 

#include <iostream>
#include <fstream>

//	定义结构体
#pragma pack (show)	//	编译时以警告4810显示字节对齐个数
#pragma pack (push)
#pragma pack (1)
#pragma pack (show)	//	编译时以警告4810显示字节对齐个数
typedef struct MyStruct
{
	int a;
	char b;
}MyStruct;
#pragma pack (pop)
#pragma pack (show)	//	编译时以警告4810显示字节对齐个数


int main()
{
	std::cout << "Hello!" << std::endl;
	std::cout << "sizeof(MyStruct) is: " << sizeof(MyStruct) << std::endl;
	MyStruct ms;

	//	文件名
	std::string fn = "d:\\temp\\My.dat";
	
	//	向文件中写入二进制数据
	std::ofstream ofs;	
	ofs.open(fn, std::ios::binary | std::ios::out | std::ios::trunc);
	if (ofs.bad()) return -1;
	for (int i = 0; i < 10; i++) {
		ms.a = i + 1;
		ms.b = (i+1) * 10;
		ofs.write((char*)&ms, sizeof(ms));
	}
	ofs.close();

	//	从文件中读取二进制数据
	std::ifstream ifs;
	ifs.open(fn, std::ios::binary | std::ios::in);
	if (ifs.bad()) return -1;
	//	获取文件大小
	std::streampos fSize = 0;
	ifs.seekg(0, std::ios::end);
	fSize = ifs.tellg();
	std::cout << "file size is: " << fSize << "Bytes." << std::endl;
	//	读取并显示数据
	for (ifs.seekg(0, std::ios::beg); ifs.tellg() < fSize; ) {
		ifs.read((char*)&ms, sizeof(ms));
		std::cout << "a: " << ms.a << " . b:" << (int)ms.b << std::endl;
	}
	ifs.close();

	return 0;
}

编译链接后,程序运行结果如下:

从运行结果可以看出,实现了二进制数据读写。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexabc3000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值