首页 >后端开发 >C++ >如何使用 C 的 `tellg()` 函数准确确定文件的大小?

如何使用 C 的 `tellg()` 函数准确确定文件的大小?

Barbara Streisand
Barbara Streisand原创
2024-12-09 10:00:19632浏览

How Can I Accurately Determine a File's Size Using C  's `tellg()` Function?

tellg() 估计文件大小的误解

C 中的tellg() 函数旨在返回代表特定值的标记值文件内的位置。稍后可使用该值使用eekg() 函数跳回到该位置。但需要注意的是,tellg() 并不直接提供文件的大小(以字节为单位)。

在提供的代码中:

void read_file(const char* name, int *size, char*& buffer) {
  ifstream file;

  file.open(name, ios::in | ios::binary);
  *size = 0;
  if (file.is_open()) {
    // Get length of file
    file.seekg(0, std::ios_base::end);
    int length = *size = file.tellg();
    file.seekg(0, std::ios_base::beg);

    // Allocate buffer in size of file
    buffer = new char[length];

    // Read
    file.read(buffer, length);
    cout << file.gcount() << endl;
  }
  file.close();
}

对 file.tellg() 的调用用于估计文件的大小。然而,这种方法是不正确的,因为tellg()不会直接返回文件大小。

确定文件大小的正确方法

准确确定文件的大小以字节为单位,建议使用以下方法:

#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);

此代码读取文件直到末尾,并且 gcount()函数返回读取的字节数。该值代表文件的实际大小。

附加说明

  • 变量缓冲区应声明为 char** 而不是 char* 才能正确指向字符数组。
  • 建议使用 std::vector或 std::string 而不是动态分配内存,以简化内存管理并避免泄漏。
  • 最终打印循环中的循环条件应该是 i

以上是如何使用 C 的 `tellg()` 函数准确确定文件的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

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