c语言文件读写有buffer什么的吗?跪求高手解答
我做了一个Generate函数,生成Record型的记录1000个,因为做的是有关硬盘读写的实验,所以每40个Record,做一次fwrite。这样,一个Record是100byte,40个正好是4000byte,和windows系统一个硬盘的block差不多。经过检查,我的写文件函数Generate没有问题,写到文件中的数据都是对着的。
下面是问题,我写了ReadFile函数,我想给这些记录一个缓存,比如我这给了一个是1000个记录的空间,就是一个Record数组。然后fread(pRcd,100,25*40,fp); 我想这个Record数组里应该就是我要的数据了。但是,我发现在第59个记录之后,我屏幕上输出的值就有问题了,我把控制台输出的结果前边的数字贴过来:
File is open!
41 18467 6334 26500 19169 15724 11478 29358 26962 24464
5705 28145 23281 16827 9961 491 2995 11942 4827 5436
32391 14604 3902 153 292 12382 17421 18716 19718 19895
5447 21726 14771 11538 1869 19912 25667 26299 17035 9894
28703 23811 31322 30333 17673 4664 15141 7711 28253 6868
25547 27644 32662 32757 20037 12859 8723 9741 27529 199181(从这个开始就出错了,后面的明显偏大)
3153101 777165 5680845 471757 73933 7707341 2314445 2289357 4931789 5798093
7026381 6094285 4068045 1722829 6238925 3929805 3841741 7962061 6244813 908493
5025229 3231693 6165709 5108429 4801741 3031245 1271501 1888461 3566541 6735053
4337869 8304589 6304461 2898893 1417677 5513933 4126413 533197 5870029 4234701
1237453 7965645 1187789 7592653 5812429 2542285 3578317 590541 8108493 5731021
下面是我的代码,求高手解答,是不是fread中有大小的要求?还是什么原因。。。
#include "stdafx.h"
#include "malloc.h"
#include "stdlib.h"
typedef struct
{
int keyValue;
char data[96];
}Record;
bool Generate()
{
FILE* fp;
fp = fopen("test.txt","w");
int count = 0;
do
{
int i;
Record* prcd = (Record*)malloc(sizeof(Record) * 40);
for(i = 0; i < 40; i++)
{
prcd[i].keyValue = rand();
printf("%5d ",prcd[i].keyValue);
if((i+1)%10==0) printf("\n");
}
fwrite(prcd,sizeof(Record)*40,1,fp);
printf("\nWrite block %d into file... \n",count);
free(prcd);
}while((1000- 40 * count++)>0);
fclose(fp);
return true;
}
bool ReadFile()
{
FILE* fp;
fp = fopen("test.txt","rb");
if(NULL == fp)
{
printf("Fail to open file\n");
return false;
}
else
{
printf("File is open!\n");
}
//char *mem = (char*)malloc(25*40*100);
Record pRcd[1000];
fread(pRcd,100,25*40,fp);
for(int i = 0;i < 1000; i++)
{
printf("%d ",pRcd[i].keyValue);
if((i+1)%40==0)
printf("\n");
if((i+1)%10==0)
printf("\n");
}
fclose(fp);
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
//Generate();
ReadFile();
return 0;
}