caobiao的个人博客分享 http://blog.sciencenet.cn/u/caobiao

博文

如何按行读取巨型数据

已有 4007 次阅读 2012-3-19 00:56 |个人分类:技术达人|系统分类:科研笔记| 巨型数据读取

void main()
{
__int64 lines = 500000,samples = 500000;
float* data = new float[samples];     
 
FILE *FP;
FP = fopen("D:\input.img","rb");                
FILE *FP2;
FP2 = fopen("D:\output.img","wb");            

for (__int64 j=0;j<lines;j++)
{
    __int64 coupos =(j*samples)*sizeof(float);
    rewind(FP);
    _lseeki64(FP->_file,coupos,0);
    //当读取的是巨型数据时必须用lseeki64函数代替fseek函数。
    //如果不写跳转指针的语句,程序会自动调用fseek,也会导致出错。
    //因为fseek函数的第二个参数为long型,占4个字节。
    //最大只能存放2147483647,而巨型数据的指针位置可能在10000亿甚至以上。
    //所以需要用__int64来存储,它的范围是900亿亿,接近无限了。
    //注意:变量j和samples必须定义为__int64类型。
 
    fread(data,sizeof(float),samples,FP);    //按行读入
    fwrite(data,sizeof(float),samples,FP2);  //按行输出
}
}


https://wap.sciencenet.cn/blog-603044-549156.html

上一篇:我们不喜欢不愿意被一座城市圈养
下一篇:毕业纪念册上的留言
收藏 IP: 210.72.27.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 03:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部