fseek 地址移动太长,超过long最大表示,怎么办
要读一个比较大的文件(>10G),是二进制连续的数据流.用fseek移动指针,发现到移动到第2147483648个字节就错误了,2147483648=0x80000000,我想这个应该表示的是long型的一个负数了,所以指针移动就出错了.那有什么办法能够解决这种大文件指针移动的问题么?
当然,如果只是向后移动的话,可以避免fseek,用fread读下去就没有这个问题,目前也是这么做的.但是现在需要实现在文件里前后的功能,还是需要用到fseek,就不知道怎么办了...
代码如下:
目前的办法
for (j = 0; j < 4000000*600; j++)
fread (&unit, 8, 1, fpin);
可以读到最后
出错的代码
for (j = 0; j < 600; j++)
fseek(fpin, (long)(4000000), 1);
读到j=537就错了,4000000*537 = 2148000000 大于 0x80000000
所以fseek就乱掉了