tellg() 误解:报告文件大小
在您的代码片段中,您遇到了tellg() 函数返回值的问题大于 read() 函数读取的文件的实际大小。这种感知差异源于对tellg() 目的的误解。
Tellg 的函数
与普遍看法相反,tellg() 不提供文件或从开头的偏移量(以字节为单位)。相反,它返回一个标记值,一个占位符,稍后可以使用该占位符返回到文件中的相同位置。返回的实际数字可能因操作系统和文件模式而异。
实际实现
实际上,在 Unix 系统上,tellg() 返回以字节为单位的偏移量,而在 Windows 上,它仅返回以二进制模式打开的文件的偏移量。对于 Windows 上的文本模式,返回的值可能无法准确反映到达该位置所需的字节数。
准确的字节计数
准确确定需要的字节数对于可读取的字节,唯一可靠的方法是执行读取操作。这可以使用如下技术来实现:
#include <limits> file.ignore( std::numeric_limits<std::streamsize>::max() ); std::streamsize length = file.gcount(); file.clear(); // Since ignore will have set eof. file.seekg( 0, std::ios_base::beg );
其他观察
除了tellg()问题之外,您的代码还包含其他错误:
通过解决这些问题,您的代码可以准确地确定文件的大小并执行读取操作正如预期的那样。
以上是为什么 `tellg()` 不能准确报告 C 中的文件大小?的详细内容。更多信息请关注PHP中文网其他相关文章!