确定MinGW 32位C中的64位文件大小

我试图让这个在MinGW 32位工作时疯狂。 它适用于我尝试过的所有其他平台。

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

这适用于其他平台:

#define _FILE_OFFSET_BITS 64 #include  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方便,但如果我_stat64 ,有一个_stat64函数使用struct __stat64 。 你可能想用一些狡猾的宏隐藏这个丑陋!

谢谢大家,好建议,但我想通了…… 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; } 

希望这有助于某人。

如果MinGW包中存在lseek64 ,您可以尝试

  #define _LARGEFILE64_SOURCE /* See feature_test_macros(7) */ #include  #include  off64_t lseek64(int fd, off64_t offset, int whence);