tellg() 函数报告文件大小不一致
在尝试将文件读入缓冲区时,用户在使用时可能会遇到不正确的结果tellg() 函数。与预期不同,tellg() 报告标记值而不是实际文件大小或字节偏移量。这种差异可以归因于该函数的预期目的。
从技术上讲,tellg() 并不直接指示文件大小或其以字节为单位的精确位置。相反,它提供了一个令牌,使程序能够重新访问文件中的同一位置。不保证令牌的值可以转换为整数数据类型。
在基于 Unix 的系统中,tellg() 通常表示距文件开头的字节偏移量。然而,在 Windows 系统上,其行为因文件的打开模式而异。对于二进制文件,偏移量类似于 Unix 行为。然而,在文本模式下,tellg() 的输出与到达给定位置所需的实际字节数之间没有直接关联。
为了准确确定文件中的可读字节数,最可靠的方法是尝试阅读过程。这可以通过以下步骤来实现:
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 );
这里,使用忽略来读取直到文件末尾。然后 gcount() 的值提供实际的字节数。
附加说明:
以上是为什么tellg()报告的文件大小不一致,如何准确确定文件大小?的详细内容。更多信息请关注PHP中文网其他相关文章!