我的问题很简单: 我应该使用fseek和SEEK_END来到达文件末尾,然后获取其长度吗? 因为在man中有这样的说法: 库实现允许不支持意义上的 SEEK_END(因此,使用它的代码没有真正的标准可移植性)。 目前我正在使用C语言中的stat函数,它更好吗?
ftell 函数返回一个 long 类型的值,在 ILP32 系统上,您无法正确获取大于 2GB 的文件大小。您应该使用 stat 函数或类似函数来获取文件的大小;请查阅操作系统手册,以确定目标操作系统中需要使用不同的函数名称(例如 stat64)或定义预处理器宏以获取大文件所需的行为。
由于C++从C继承了fseek和SEEK_END,因此我在这里引用C标准: C11(ISO/IEC 9899:201x)§7.21.9.2 The fseek function第3节 二进制流不必有意义地支持whence值为SEEK_END的fseek调用。
stat
和man
,所以可以安全地假设你正在使用 Linux 或其他 Unix 吗?你关心其他平台吗? - BoBTFish