Вопрос: Как из середины бинарного файла удалить определённое количество байт?
Ответ :
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;
}
--------------------------------------------------------------------------------
|