0
点赞
收藏
分享

微信扫一扫

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

慎壹 2022-01-27 阅读 83

通过在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;
}

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

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

举报

相关推荐

0 条评论