首页 >后端开发 >C++ >如何在 C 中准确确定文件的大小而不是使用 `tellg()`?

如何在 C 中准确确定文件的大小而不是使用 `tellg()`?

Barbara Streisand
Barbara Streisand原创
2024-12-16 11:02:14991浏览

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

tellg() 函数和文件大小调整

tellg() 是 C 语言中的一个函数,用于检索文件中的当前位置。但是,请务必注意,tellg() 不提供文件的实际大小(以字节为单位)。相反,它返回一个标记值,稍后可以使用该值来返回到同一位置。

在提供的代码中,似乎对tellg() 的预期行为存在误解。该代码使用tellg() 来确定文件的大小,然后用于分配缓冲区来保存文件内容。但是,不应依赖tellg() 来实现此目的。

根据 C 语言规范,tellg() 返回特定于实现的标记值。虽然它通常对应于 Unix 系统中的字节偏移量,但在 Windows 下不能保证这种行为。在文本模式下,Windows 可能会返回一个大于到达当前位置所需的实际字节数的值。

要准确确定文件的大小,建议使用替代方法,例如:

#include <limits>

...

file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount(); // Retrieve the size of the file in bytes
file.clear(); // Reset the file stream
file.seekg(0, std::ios_base::beg); // Return to the beginning of the file

此外,提供的代码中存在几个问题:

  • *buffer = new char[length];应更正为 buffer = new char[length];。
  • 使用 int 表示 size 不合适;应改用 std::streamsize。
  • 不提供错误处理,以防文件无法打开。

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

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