C ++ Binary Stream - PullRequest
       11

C ++ Binary Stream

0 голосов
/ 29 мая 2018

Я, должно быть, упускаю что-то простое здесь, но я пытаюсь написать и прочитать двоичный файл на C ++.

    ofstream file3("C:\\data2.txt", ios::out | ios::binary);
for (int i = 0; i < 100; i++) {
    file3.write((char*)(&i), sizeof(int));
}

ifstream file4("C:\\data2.txt", ios::in | ios::binary);

int temp;
while (!file4.eof()) {
    file4.read((char*)(&temp), sizeof(int));
    cout << temp << endl;
}

Файл выглядит так, как будто он создается правильно при просмотре с помощью шестнадцатеричного редактора.Однако, когда я читаю файл, он читает 1 случайное нежелательное значение и выходит против перечисления всех чисел.

Обновление

Я сделал небольшое обновление на основе комментариев, и все кажетсятеперь хорошо.В Windows закрытие сделало разницу, и я исправил условие цикла.

    ofstream file3("C:\\data2.txt", ios::out | ios::binary);
for (int i = 0; i < 100; i++) {
    file3.write((char*)(&i), sizeof(int));
}

file3.close();
ifstream file4("C:\\data2.txt", ios::in | ios::binary);

//cout << file4.eof();
int temp;
while (!file4.read((char*)(&temp), sizeof(int)).eof()) {
    cout << temp << endl;
}

1 Ответ

0 голосов
/ 29 мая 2018

Возможно, у вас нет разрешения на запись в c:\\file, поэтому вам следует проверить, можете ли вы.Что касается использования .eof(), см. в этой теме .Наконец, вы можете закрыть файл перед тем, как снова открыть его для чтения.Вот ваш пример настройки:

#include<iostream>
#include<fstream>

int main()
{
    std::ofstream file3("data2.txt", std::ios::binary);
    if (file3)
    {
        for (int i = 0; i < 100; i++)
        {
            file3.write((char*)(&i), sizeof(int));
        }
        file3.close();
    }

    std::ifstream file4("data2.txt", std::ios::binary);

    int temp;
    while (file4)
    {
        file4.read((char*)(&temp), sizeof(int));
        std::cout << temp << std::endl;
    }
}

Демо: http://coliru.stacked -crooked.com / view? Id = 8f519fcd05879855

...