c++ 二进制方式读写文件

本文展示了一个使用C++进行文件读写的示例程序。该程序通过二进制方式写入浮点数,并附加字符串数据;然后读取这些数据并显示出来。此示例涵盖了文件打开、写入、关闭及读取等基本操作。


void CTestFileOperateDlg::OnBnClickedButton1()
{
 FILE *fp1;
 double xc,yc,zc;
 fp1=fopen("result.dat","wb");
 if(!fp1) exit(-1);
 xc=1.0;
 yc=2.0;
 zc=3.0;
 fwrite(&xc,sizeof(double),1,fp1);
 fwrite(&yc,sizeof(double),1,fp1);
 fwrite(&zc,sizeof(double),1,fp1);
 char cData[] = "zxn我的文件数据";
 fwrite(cData,sizeof(cData),1,fp1);
 fflush(fp1);
 fclose(fp1);
 MessageBoxA(NULL,"zxn我的文件数据","写文件成功",MB_OK);
}


void CTestFileOperateDlg::OnBnClickedButton2()
{
 FILE *fp1;
 fp1=fopen("result.dat","rb");
 if(!fp1) exit(-1);
 fseek(fp1,0,SEEK_END);
 int flen=ftell(fp1);
 fseek(fp1,0,0);
 double xc,yc,zc;
 fread(&xc,sizeof(double),1,fp1);
 fread(&yc,sizeof(double),1,fp1);
 fread(&zc,sizeof(double),1,fp1);
 TRACE("%f%f%f",xc,yc,zc);
 char cBuf[100] = {0};
 fread(cBuf,flen - 3*sizeof(double),1,fp1);
 char cMsg[200] = "读到的数据:";
 strcat(cMsg,cBuf);
 MessageBoxA(NULL,cMsg,"info",MB_OK);
 fclose(fp1);
}

C++中,二进制流(Binary Streams)是一种用于处理非文本数据,如图片、音频或二进制数据结构的输入输出流。它比文本流(Text Streams)更适合存储原始数值,因为它们不会进行额外的字符转换,保持了数据的精确性和效率。 `fstream`库在C++中提供了一组类用于操作二进制流,包括`ifstream`(用于读取)和`ofstream`(用于入)。下面是一个简单的例子: ```cpp #include <fstream> #include <iostream> // 想要入的数据 std::vector<int> data = {10, 20, 30, 40, 50}; int main() { // 打开一个二进制文件(如果不存在则创建) std::ofstream file("binary_data.bin", std::ios::binary); // 如果打开成功 if (file.is_open()) { // 二进制数据 for (int value : data) { file.write(reinterpret_cast<char*>(&value), sizeof(value)); } // 关闭文件 file.close(); std::cout << "Data written successfully.\n"; } else { std::cerr << "Unable to open the file.\n"; } return 0; } // 另一方面,读取文件 std::ifstream readFile("binary_data.bin", std::ios::binary); if (readFile.is_open()) { int numElements; // 读取元素的数量 readFile.read(reinterpret_cast<char*>(&numElements), sizeof(numElements)); // 创建向量来存储数据 std::vector<int> readData(numElements); // 读取并解码所有数据 for (size_t i = 0; i < numElements; ++i) { readFile.read(reinterpret_cast<char*>(&readData[i]), sizeof(readData[i])); } // 关闭文件 readFile.close(); // 现在你可以使用readData } else { std::cerr << "Unable to open the file for reading.\n"; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值