欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言二进制读写文件

程序员文章站 2022-07-15 08:11:42
...
#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;

typedef  struct A
{
	int a;
	int b;
	A(int x, int y)
	{
		a = x;
		b = y;
	}
	A()
	{}
};

int _tmain(int argc, _TCHAR* argv[])
{
	A A1(1,2);
	A A2(2,3);

	vector<A> AVec;
	AVec.push_back(A1);
	AVec.push_back(A2);


	//写文件
	FILE *p1 = fopen("D:\\测试\\fileTest\\fileTest\\rankTestData.txt", "wb");
    fwrite(&AVec[0], sizeof(A), AVec.size(), p1);
	fclose(p1);

	//读文件
    FILE *p = fopen("D:\\测试\\fileTest\\fileTest\\rankTestData.txt", "rb");
	fseek (p, 0, SEEK_END);
	int size = ftell (p);
	int nCount = size/sizeof(A);
	vector<A> aVec;
	aVec.resize(nCount);
	fseek (p, 0, SEEK_SET);
	fread(&aVec[0], sizeof(A), nCount, p);
	fclose(p1);

	int nData = aVec[1].a;

	return 0;
}

说明:
可能会在网上看见fwrite(&AVec[0], sizeof(A), AVec.size(), p1);写入形式为for循环写入,实质只要明白fwrite的参数结构可以一次性读取整个序列。fwrite(a, b,c, p1), a为要写入的序列的首地址,b为一个结构的大小, c为这个序列有多少个结构体, p1为文件指针指向的位置。
同理:fread(&aVec[0], sizeof(A), nCount, p);也是一样的理解,注意读文件的时候要提前resize.