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);