C ++ очистить / перезаписать содержимое с начала файла - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужно стереть или перезаписать (лучше было бы стереть) количество байтов с начала файла. Содержимое сначала считывается в структуру данных после записи нового содержимого.

В настоящее время у меня есть часть для чтения и письма. Как я могу сделать часть очистки данных? Спросите, хотите ли вы узнать что-нибудь еще. Спасибо, извините за плохой английский:)

typedef struct header {
   char    version[5]; //Offset 0, length 5, Archiver version
   int     files_no;   //Offset 5, length 8, Number of files in the archive
   char    desc[256];  //Offset 13, length 256, Archive description, Header size 296??

   header() {
       strcpy(version, "0.20");
       strcpy(desc, "THIS IS A DESCRIPTION FIELD WITH 256BYTE!");
   }
}archiveHeader;

int archive(char *argv[], int argc) {
   archiveHeader   archive_struct_write, archive_struct_read;
   string          output = argv[argc-1]; output += ".n0b"; //Name of file to modify
   int             write_counter = 1;

   ofstream file_write(output.c_str(), ios::binary | ios::app);
   file_write.seekp(0, file_write.beg);

   ifstream file_read(output.c_str(), ios::binary);
   file_read.read((char*)&archive_struct_read, sizeof(archive_struct_read)); //Read existing beginning data

   //Steps for erasing the read stuff goes here.    

   write_counter = archive_struct_read.files_no;
   archive_struct_write.files_no = write_counter + 1;

   file_write.write((char*)&archive_struct_write, sizeof(archive_struct_write)); //New beginning data written
   file_read.close();
   file_write.close();

   write_counter++;

   return 0;
}

Редактировать: Буферизация всего после начальных байтов и запись в новый файл не вариант, размер файла может варьироваться до ГБ. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...