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.
上一篇: 一些算法题