C++ - std::fstream read() 未读取完整文件

C++ - std::fstream read() does not read full file

我想创建一个 MIDI 解释器用于更大的项目,但我目前面临一个巨大的问题:似乎在某些情况下,我的文件没有被完全读取,所以我没有拥有我需要的全部数据...例如,我有一个大约 30 000 字节长的文件,而 fstream::read() 函数只读取其中的大约 3000 个...

我的代码在下面,如果有人有想法...

我还没有找到类似的问题,如果有请告诉我。

    std::ifstream file;
    file.open("Songs/" + filename + ".mid");
    if (!file.is_open())
    {
        std::cerr << "Failed to open file" << std::endl;
        return;
    }
    std::vector<unsigned char> fileData;

    while (file.read((char *)&c, 1))
    {
        fileData.push_back(c);
    }
    file.close();

默认情况下,文件流使用"in + out" 模式打开文本文件的文件流。尝试将 "in"(当您从文件中读取时)和 "binary"(因为您的文件不是纯文本)完全结合起来,像这样:

std::ifstream file;
file.open("Songs/" + filename + ".mid", std::ios_base::in | std::ios_base::binary);
if (!file.is_open())
{
    std::cerr << "Failed to open file" << std::endl;
    return;
}
std::vector<unsigned char> fileData;

while (file.read((char *)&c, 1))
{
    fileData.push_back(c);
}
file.close();