c++ - 如何使用 C++ 一次读取整个二进制文件

标签 c++

我在文件中有一些二进制数据。为了读取所有数据,我这样做了:

// open the file
// ...
// now read the file
char data;
while (fread(&data, sizeof(char), 1, input) == 1) {
    // do something
}

嗯,这很好用,但我的老师说我不应该逐行读取文件,因为这会增加 I/O 量。所以现在我需要一次读取整个二进制文件。我怎样才能做到这一点?谁能帮忙?

最佳答案

首先请注意,如果您将文件读取到 1 字节缓冲区(代码中的数据变量),您的程序可能会崩溃(如果文件大小 > 1)。因此,您需要分配一个缓冲区来读取文件。

FILE *f = fopen(filepath, "rb+");
if (f)
{
    fseek(f, 0L, SEEK_END);
    long filesize = ftell(f); // get file size
    fseek(f, 0L ,SEEK_SET); //go back to the beginning
    char* buffer = new char[filesize]; // allocate the read buf
    fread(buffer, 1, filesize, f);
    fclose(f);

    // Do what you want with file data

    delete[] buffer;
}

关于c++ - 如何使用 C++ 一次读取整个二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52489093/

相关文章:

c++ - 测试 Doom 3 Stack 实现时堆栈损坏

c++ - QtQuick 动画卡住列表和打开串口

c++ - sf::Drawable 和 sf::Transformable 包含 Sprite 、文本和形状的数组

c++ - 显示浮点的 ieee 32 位表示...指针输出的奇怪行为

c++ - 将 CMake 与多个编译器一起用于同一语言

C++ promise / future : Which to return from a function?

c++ - 如何仅从字符串数组中复制确切的索引元素?

c++ - 如何在 C++ 编译时实现有向无环图 DAG

c++ - Cocos2d-x (4.0) - 整数像素缩放

c++ - 线程成员函数和 mex 文件因 std::bad_alloc 而崩溃