Запись в существующий пустой двоичный файл в C ++

0

Я пытаюсь записать существующий пустой двоичный файл размером 1 МБ с помощью C++ в определенной позиции.

ofstream of( filename, ofstream::binary );
of.seekp(1600, of.beg);
of.write(arr, 1024);
of.close();

Пустой файл создается путем записи этого буфера в файл до:

char *buffer = (char*)malloc(size);     
memset(buffer, ' ', size);

Но этот код просто обрезает весь пустой файл пробела 1 МБ и записывает это содержимое 1 КБ, а размер файла становится 1 КБ.

Пробовал использовать app а также режим ate. Когда я попробовал режим app следующим образом:

ofstream of( filename, ofstream::binary | ofstream::app );
of.seekp(1600, of.beg);
of.write(arr, 1024);
of.close();

Он добавляет содержимое в конец файла. Таким образом, файл становится размером 1 МБ + 1 КБ.

То, что я пытаюсь сделать, это перезаписать 1KB-данные (в настоящее время это пустое пространство) в файле с некоторыми данными. Так что он не изменит размер файла или другие данные.

Где я делаю это неправильно?

  • 5
    Я не могу быть единственным человеком , что любопытно то , что «пустой расставленные двоичный файл» есть. Я просто не могу быть ...
  • 0
    извините, если я использовал неправильный термин. Я включил код выше. пожалуйста, проверьте
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

использование

ofstream of( filename, ofstream::binary | ofstream::in | ofstream::out)

для открытия бинарного файла для обновления.

См. С++ 11 Таблица 123 - Режимы открытия файлов (в 27.9.1.4/3):

Table 132 — File open modes

 ios_base flag combination          stdio 
binary  in   out  trunc  app       equivalent
---------------------------------------------------
              +                      "w"    truncate/create for writing
              +           +          "a"    append - writes automatically seek to EOF
                          +          "a"    
              +     +                "w"    
        +                            "r"    open for read
---------------------------------------------------
        +     +                      "r+"   open for update (reading and writing)
        +     +     +                "w+"   truncate/create for update
        +     +           +          "a+"   open or create for update - writes seek to EOF
        +                 +          "a+"
---------------------------------------------------
  +           +                      "wb"   All same as above, but in binary mode
  +           +           +          "ab"
  +                       +          "ab"
  +           +     +                "wb"
  +     +                            "rb"
---------------------------------------------------
  +     +     +                      "r+b"
  +     +     +     +                "w+b"
  +     +     +           +          "a+b"
  +     +                 +          "a+b"
  • 1
    Зачем использовать ::in ?
  • 1
    Потому что, если вы этого не сделаете, файл будет усечен.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню