Когда я читаю вопрос, вы просите удалить содержимое из файла, начиная с начала файла.Другими словами, вы хотите удалить содержимое в начале файла и сдвинуть оставшееся содержимое вниз.
Это невозможно.Вы можете обрезать файл только с конца, а не с начала.Вам нужно будет скопировать оставшееся содержимое в новый файл или скопировать его самостоятельно в тот же файл.
Однако, если вы сделаете это, быстрого способа сделать это не существует.Вы должны скопировать данные, например, как описывает @kobik.
Раймонд Чен написал хорошую статью на эту тему: Как мне удалить байты из начала файла?
Просто для удовольствия, вот простая реализация потокового метода для удаления контента из любой точки файла.Вы можете использовать это с потоком файлов для чтения / записи.Я не проверял код, я оставлю это вам!
procedure DeleteFromStream(Stream: TStream; Start, Length: Int64);
var
Buffer: Pointer;
BufferSize: Integer;
BytesToRead: Int64;
BytesRemaining: Int64;
SourcePos, DestPos: Int64;
begin
SourcePos := Start+Length;
DestPos := Start;
BytesRemaining := Stream.Size-SourcePos;
BufferSize := Min(BytesRemaining, 1024*1024*16);//no bigger than 16MB
GetMem(Buffer, BufferSize);
try
while BytesRemaining>0 do begin
BytesToRead := Min(BufferSize, BytesRemaining);
Stream.Position := SourcePos;
Stream.ReadBuffer(Buffer^, BytesToRead);
Stream.Position := DestPos;
Stream.WriteBuffer(Buffer^, BytesToRead);
inc(SourcePos, BytesToRead);
inc(DestPos, BytesToRead);
dec(BytesRemaining, BytesToRead);
end;
Stream.Size := DestPos;
finally
FreeMem(Buffer);
end;
end;