Ошибка записи двоичных файлов в C ++ - PullRequest
0 голосов
/ 17 апреля 2011

Я пытаюсь открыть двоичный файл для чтения и записи (flag: ios_base :: binary | ios_base :: in | ios_base :: out).

Мой файл уже существует, и его содержимое: 123

Нет проблем с чтением файла, но запись файла не работает после закрытия файла.Содержимое файла не имеет изменений.Кажется, fstream.write () работает неправильно.

Я использую VS2010.

Код:

#include <iostream>
#include <fstream>
using namespace std;

int main (void) 
{
    fstream stream;

    // Opening the file: binary + read + write.
    // Content of file is: 123
    stream.open("D:\\sample.txt", ios_base::binary | ios_base::in | ios_base::out);

    // Read 1 bye.
    char ch;
    stream.read(&ch, 1/*size*/);

    // Check any errors.
    if(!stream.good())
    {
        cout << "An error occured." << endl;
        return 1;
    }

    // Check ch.
    // Content of file was: 123
    if(ch == '1')
    {
        cout << "It is correct" << endl;
    }

    // Write 1 bye.
    ch = 'Z';
    stream.write(&ch, 1/*size*/);

    // Check any errors.
    if(!stream.good())
    {
        cout << "An error occured." << endl;
        return 1;
    }

    // Close the file.
    stream.close();

    // OHhhhhhhhhhh:
    // The content of file should be: 1Z3
    // but it is: 123

    return 0;
}

Спасибо.

Извините за мойpooooooor английский: -)

1 Ответ

3 голосов
/ 17 апреля 2011

Вам необходимо правильно указать указатель записи:

stream.seekp( 1 );
stream.write(&ch, 1/*size*/);
...