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

Ответ :

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; 
}

--------------------------------------------------------------------------------
	

Электронные Книги по компьютерным программам
На правах рекламы:
Логин
Пароль
Запомнить меня