Сборник часто задаваемых вопросов по программированию в среде Borland C++ Builder

           

Как из середины бинарного файла удалить определённое количество байт?



Вопрос: Как из середины бинарного файла удалить определённое количество байт?

Ответ : 1. исходный файл переименовываешь на какой-то временный 2. открываешь новый файл с именем файла оригинала 3. со временного файла в новый файл пишешь до байта для удаления 4. пропускаешь нужное количество байт с временного 5. остальное дописываешь на новый файл. это идея в общем. если файл небольшой (до 16 Мб), то можно и попроще сделать: code: -------------------------------------------------------------------------------- long ofs; // с какого байта надо удалять long byte; // сколько байт удалять long size; // размер файла unsigned char *buf; // буфер int fh; fh=FileOpen(filename,fmOpenRead); buf = new unsigned char[size+1]; FileRead(fh,buf,size); FileClose( fh ); memcpy(buf+ofs,buf+ofs+byte,size-ofs-byte); FileCreate( filename ); FileWrite( fh, buf, size-byte ); FileClose(fh); -------------------------------------------------------------------------------- в расчетах +/-1 надо уточнять практический. Для больших файлов code: -------------------------------------------------------------------------------- void trunk(String source, String dest,long offset, long bytes) { TFileStream *fsin = new TFileStream( source,fmOpenRead); TFileStream *fsout = new TFileStream( dest,fmCreate); fsout->CopyFrom(fsin,offset); fsin->Position=offset+bytes; fsout->CopyFrom(fsin,fsin->Size-offset-bytes); delete fsin; delete fsout; } --------------------------------------------------------------------------------

Содержание раздела