1.size_t fread(void*buffer,size_tsize,size_tcount,FILE*stream);
功 能: 从一个流中读数据
参 数:
1.用于接收数据的地址(指针)(buffer)
2.单个元素的大小(size) :单位是字节而不是位,例如读取一个int型数据就是4个字节
3.元素个数(count)
4.提供数据的文件指针(stream)
返回值:读取的元素的个数
2.int fseek(FILE *stream, long offset, int fromwhere);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头SEEK_SET 0 ,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
3.在windows下 320G硬盘, 3G内存 ,
单线程一次写1.5G数据需要17.6秒 , 写100M需要1141毫秒,写10M数据要140毫秒左右, 1M数据16毫秒
读取100M数据约为 110毫秒. 10M数据16毫秒。 读取比写入时间短,受硬件配置, 后台程序是否同时写盘等影响。
4. 32位机器,ftell, tellg只能获取最大2G的文件大小,如果要正常获取
long long fIndexEnd = *(__int64*) ( ((char*)&(dataFile.tellg())) +8);
获取文件大小
dataFile.seekg(0, ios_base::end);
long long dwLen = 0;
dwLen = *(__int64*) ( ((char*)&(dataFile.tellg())) + 8); //文件大小
文件偏移是可以大于2G的,如下
long long dwSeek = 2197483648LL ;
dataFile.seekg(dwSeek, ios::beg);