gpt4 book ai didi

c - 在 MinGW 32 位上确定 C 中的 64 位文件大小

转载 作者:行者123 更新时间:2023-12-02 07:34:26 29 4
gpt4 key购买 nike

我正在疯狂地尝试让它在 MinGW 32 位中工作。它适用于我尝试过的所有其他平台。

我想做的就是将 > 4GB 文件的大小转换为 64 位 int。

这在其他平台上运行良好:

#define _FILE_OFFSET_BITS   64
#include <sys/stat.h>

int64_t fsize(const char *filename) {
struct stat st;

if (stat(filename, &st) == 0)
return st.st_size;

return -1;
}

根据我在网上找到的各种建议,我尝试在上述代码之前添加以下定义:

#define _LARGEFILE_SOURCE   1
#define _LARGEFILE64_SOURCE 1
#define __USE_LARGEFILE64 1

还尝试过:

#ifdef __MINGW32__
#define off_t off64_t
#endif

最后尝试将 -D_FILE_OFFSET_BITS=64 添加到 gcc 标志(应该与上面的定义相同...)

运气不好。返回的 int64_t 仍然被截断为 32 位值。

在 MinGW 32 位中确定 64 位文件大小的正确方法是什么?

谢谢!

最佳答案

谢谢大家,很好的建议,但我想通了...MinGW 需要这个定义来启用 struct __stat64 和函数 _stat64:

#if __MINGW32__
#define __MSVCRT_VERSION__ 0x0601
#endif

然后这有效:

int64_t fsize(const char *filename) {

#if __MINGW32__
struct __stat64 st;
if (_stat64(filename, &st) == 0)
#else
struct stat st;
if (stat(filename, &st) == 0)
#endif

return st.st_size;

return -1;
}

希望这对某人有帮助。

关于c - 在 MinGW 32 位上确定 C 中的 64 位文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12539488/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com