在任何人抱怨“重复”之前,我已经非常全面地检查了,但似乎还没有干净的答案,虽然这个问题看起来很简单.
我正在寻找便携式C代码,即使文件大于4GB,也可以提供文件的大小.
通常的方法(fseek,ftell)工作正常,只要文件保持< 2GB.它在各地都得到很好的支持,所以我试图找到一些相当的东西. 不幸的是,所有编译器都不支持更新的方法(fseeko,ftello).例如,MinGW想念它(显然MSVC).此外,一些评论使我相信新的返回类型(off_t)不一定支持size> 2GB,可能需要检查一些外部参数.
MSVC不支持明确的方法(fseeko64,ftello64). MS提供了等效的_fseeki64& _ftelli64.这已经很糟糕了,但是变得更糟:一些Linux配置似乎在运行时严重支持这些功能.例如,我使用GCC 4.4的PowerPC上的Debian Squeeze将使用fseeko64生成一个“filesize”方法,该文件总是返回0(当它适用于Ubuntu64时). MinGW似乎回答了一些2GB以上的随机垃圾.
那么就便携性而言,我有点无知.如果我需要一堆#if #else,那么为什么不直接去操作系统?编译器首先详细说明方法,例如MSVC的GetFileSize().
解决方法
你说:没有便携式的方法;如果我是你,我将在Windows上使用GetFileSize和POSIX上的stat.