首页 >后端开发 >C++ >为什么tellg()报告的文件大小不一致,如何准确确定文件大小?

为什么tellg()报告的文件大小不一致,如何准确确定文件大小?

Patricia Arquette
Patricia Arquette原创
2024-12-08 03:54:11137浏览

Why Does tellg() Report Inconsistent File Sizes, and How Can I Accurately Determine File Size?

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() 的值提供实际的字节数。

附加说明:

  1. 行 *buffer = new char[length];应避免,因为它尝试将指针分配给字符变量。相反,请考虑将 buffer 声明为 char** 或使用向量或字符串。
  2. 代码末尾的循环条件 (int i = 0; i
  3. 未能处理文件打开错误(例如,将大小设置为 0)是一种潜在的疏忽。

以上是为什么tellg()报告的文件大小不一致,如何准确确定文件大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn