一个大文件,肯定是内存无法全部读取的,比如1TB,里边很多字段,假设是这样的:
1
1
1
这样一行一个数字,简单点,不统计每个数字的频率了,仅仅统计有多少个1,如何做呢?
FILE * p = fopen("test.dat","r");
__int64 len=0;
char a[2]={0};
for(int i = 0 ;; i ++)
{
fread(a,2,1,p);
if(a[0]!='1')
break;
len =i*1024;
}
printf("%s %d\n",a,len);
fclose(p);
p = NULL;
之前以为fopen是将文件全部加载进内存后再操作,实践之后发现不是这样,它可以一点点向后读取,但是要是太大,直接就seek到文件结尾,还是会异常、崩溃,这时候使用虚拟内存映射来处理:
#include <stdio.h>
#include <Windows.h>
void createBigFile(int NumberGB=0)
{
FILE * p = fopen("d:\\test.dat","w+");
for(int i = 0 ; i < NumberGB ; i ++)
{
fwrite("1\n",2,1,p);
}
fclose(p);
p = NULL;
}
voi