在没有重复问题的情况下,我已经彻底检查了SO,但似乎还没有清晰的答案,尽管问题看起来很简单。我正在寻找一种便携式C代码,即使这样的文件大于4GB,也能提供文件的大小。通常的方法(fseek,ftell)可以正常工作,只要文件保持小于2GB。它已经得到了很好的支持,因此我正在尝试找到等效的东西。不幸的是,更新的方法(fseeko,ftello)并非所有编译器都支持。例如,MinGW错过了它(显然MSVC也是如此)。此外,一些注释让我相信新的返回类型(off_t)不一定支持大小> 2GB,这可能取决于一些外部参数,需要进行检查。不明确的方法(fseeko64,ftello64)不受MSVC支持。 MS提供它们的等效物,_fseeki64和_ftelli64。这已经很糟糕了,但情况变得更糟:在运行时,一些Linux配置似乎不支持这些功能。例如,我的Debian Squeeze on PowerPC使用GCC 4.4将产生一个使用fseeko64的“filesize”方法,该方法始终返回0(而在Ubuntu64上却很好地工作)。 MinGW似乎会在2GB以上回答一些随机垃圾。总之,就可移植性而言,我有点茫然无措。如果我需要制作一堆#if #else,那么为什么不直接去操作系统和编译器特定的方法呢,例如对于MSVC的GetFileSize()方法。