1

我正在尝试使用 fseek 来逐步浏览一个非常大(~500 GB)的文件。由于 fseek 的第二个参数,偏移量,是一个 long int,我必须考虑到我想要的偏移量何时大于 2^31 - 1。这是我的解决方案:

    fseek(file,offset % LONG_MAX,SEEK_SET);;
    for (int i = 0; i < offset/LONG_MAX; i++)
    {
      fseek(file,LONG_MAX,SEEK_CUR);
    }

其中 LONG_MAX 在 limits.h 中定义,offset 是 64 位整数。但是,for 循环中的 fseek 调用存在错误。它返回一个非零值,并且 perror 说“无效参数”。为什么我不能使用 LONG_MAX(定义为 2147483647L)作为偏移量?

4

2 回答 2

1

如果您有“普通”操作系统,请使用 fseek64() 变体。

于 2012-06-27T15:26:42.183 回答
0

您确定错误是 Long_Max 吗?如果那是您的原始代码,那么可能是两个 fseek fns 中的“file”和“file_”之间的区别?!

于 2012-06-27T15:30:29.307 回答