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

标签 c mingw filesize

我正在疯狂地尝试让它在 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/

相关文章:

objective-c - 在 FTP 下载时获取文件大小

c - 如何将二维数组广播到所有进程,以便每个等级中的函数都可以访问它?

c - TCP 套接字传输中字符串的第一个字符丢失 - C

c++ - 使用 MinGW gcc/g++ (nuwen distro) 编译的程序中的运行时错误

opencv - 如何减小 opencv 中学习模型的大小(对于 CvBoost)?

recursion - 使用 Inno Setup PreProcessor 获取源路径及其子目录的文件和大小

c - 在 C 中将 int 写入二进制文件时出现问题

c - Xeon Phi 上的 SCIF 问题

python - 无法在 Windows 7 中安装图形工具

使用 MinGW 找不到 C++ 过程入口点