C++ (Windows)使用ftello()返回不正确的文件大小;“一些”;二进制文件

C++ (Windows)使用ftello()返回不正确的文件大小;“一些”;二进制文件,c++,windows,filesize,fseek,ftell,C++,Windows,Filesize,Fseek,Ftell,我首先使用fseeko将文件指针移动到文件末尾,然后使用ftello获取二进制文件大小。我参考本页并遵循“Compliant Solution(POSIX ftello())”部分中完全相同的代码 我的问题是,这对某些二进制文件很好,但对其他一些二进制文件却不行。我现在正在寻找一种访问二进制文件大小的通用方法 fseeko(imageFile, 0, SEEK_END); imageSize = ftello(imageFile); fseeko(imageFile, 0, SEEK_SET);

我首先使用
fseeko
将文件指针移动到文件末尾,然后使用
ftello
获取二进制文件大小。我参考本页并遵循“Compliant Solution(POSIX ftello())”部分中完全相同的代码

我的问题是,这对某些二进制文件很好,但对其他一些二进制文件却不行。我现在正在寻找一种访问二进制文件大小的通用方法

fseeko(imageFile, 0, SEEK_END);
imageSize = ftello(imageFile);
fseeko(imageFile, 0, SEEK_SET);

我更喜欢在C中使用stdio,而不是任何基于操作系统的函数。谢谢

窗户!=POSIX对于其他一些二进制文件来说,
意味着什么?是否有一个寻道失败,tello是否返回错误的值?这些文件有共同之处吗?它们的大小超过2千兆还是超过4?你使用的功能不是标准C或标准C++的一部分,所以你最好还是使用Windows函数。另外,是否以二进制模式打开文件?请注意
fseeko()
ftello()
使用
off\t
值。“在许多体系结构上,
off\u t
long
都是32位类型,但是使用
\define\u FILE\u OFFSET\u BITS 64
编译将
off\u t
转换为64位类型。”32位
off\u t
无法处理文件大小>2GB@Nick_Chang你说:“一个文件是15GB,另一个是2.5GB。”-这两个值(
16106127360
2684354560
)都不能放入32位的
关闭模式中<代码>2097152
是2MB,而不是2GB(
2147483648
)。