我正在尝试使用fseek来浏览一个非常大的(〜500 GB)文件。由于FSEEK的第二个参数,偏移,是一个长整型,我必须考虑到当偏移我要的是大于2^31 - 1。这里是我的解决方案:fseek错误与LONG_MAX
fseek(file,offset % LONG_MAX,SEEK_SET);;
for (int i = 0; i < offset/LONG_MAX; i++)
{
fseek(file,LONG_MAX,SEEK_CUR);
}
凡LONG_MAX在限制的定义。 h和偏移量是64位整数。但是,for循环中的fseek调用有错误。它返回一个非零值,perror表示“无效参数”。为什么我不能使用LONG_MAX(定义为2147483647L)作为偏移量?
你确定它是?这里LONG_MAX被定义为9223372036854775807 – PlasmaHH
什么操作系统?您可能需要专门使用64位版本的fseek,例如_fseeki64来访问文件> 4Gb –
是的,程序仅在offset> 2^31 - 1时进入for循环。另外,我的IDE说LONG_MAX被定义为2147483647L。 – awelkie