8

给定 tmp.c:

#include <sys/stat.h>
#include <errno.h>
#include <stdio.h>

int main(int argc, const char *argv[])
{
    struct stat st;
    if (stat(argv[1], &st) != 0)
    {
        perror("Error calling stat");
    }

    return 0;
}

Error calling stat: Value too large for defined data type当我在一个大文件(~2.5 Gb)上运行程序时,我得到了。

4

4 回答 4

10

需要#define _FILE_OFFSET_BITS 64:要么在您之前添加它,要么 #include <sys/stat.h>以特定于平台的方式定义它,例如,对于 gcc,请参见 -D 选项;对于 Visual Studio,请转到项目属性 -> 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义

于 2012-12-15T15:40:14.407 回答
3

如果其他人有这个问题并且_FILE_OFFSET_BITS 64之前#include "sys/stat.h"还没有解决它,只需将它移动到所有其他包含的前面。我没有发现哪些标题也依赖于此,但它解决了问题。

于 2013-02-02T19:07:35.767 回答
1

看看这个链接。它为您提供了处理此类问题的方法。

这通常通过定义 -D_FILE_OFFSET_BITS=64 或类似来完成。它取决于系统。一旦完成并切换到这种新模式,大多数程序都会很好地支持大文件。

于 2012-12-15T15:52:14.947 回答
0

您可以通过在程序中包含头文件config.h来消除此限制。这不是必须包含整个文件,但您也可以放置一个宏#define _FILE_OFFSET_BITS 64 来消除限制。

于 2012-12-15T15:54:58.090 回答