C ++ - std :: fstream read () не читает полный файл - PullRequest
0 голосов
/ 11 февраля 2020

Я хотел бы создать интерпретатор 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();

1 Ответ

0 голосов
/ 11 февраля 2020

По умолчанию файловые потоки используют режим «in + out», чтобы открыть файловый поток для текстового файла. Попробуйте объединить «in» (как вы читаете из файла) и «двоичный» (так как ваш файл не является простым текстом), примерно так:

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();
...