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
)。