首页 >后端开发 >C++ >为什么 `tellg()` 不能准确报告 C 中的文件大小?

为什么 `tellg()` 不能准确报告 C 中的文件大小?

Barbara Streisand
Barbara Streisand原创
2024-12-02 20:56:11123浏览

Why Does `tellg()` Not Accurately Report File Size in C  ?

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()问题之外,您的代码还包含其他错误:

  1. 行“buffer = new char[length];”应该是“*buffer = new char[length];”分配一个指向字符数组的指针。
  2. 第二个 for 循环中的循环条件应该是 while ( file.get( buffer[i] ) ),用于逐个字符读取。
  3. 应该实现错误处理,以防文件打开失败。

通过解决这些问题,您的代码可以准确地确定文件的大小并执行读取操作正如预期的那样。

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

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