Показать сообщение отдельно
  #2  
Старый 05.04.2010, 20:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Описываешь струкруры блоков данных файла как записи. Потом открываешь файл через поток и начинаешь оттуда эти структуры читать.

Я не знаю формата этого файла, но как вообще будет выглядеть код (для некоторого виртуального файла) могу показать:

Пусть у нас в файле сначала идет заголовок, содержащий сигнатуру файла, его мажорную и минорную версии и кол-во блоков данных. Каждый блок данных предваряется некоторым дескриптором, состоящим из типа блока и его размера. Далее идут данные блока и следующий блок с дескриптором.

Код:
type
  TFileHeader = packed record
    Signature : DWORD;
    VerMajor : BYTE;
    VerMinor : BYTE;
    BlocksCount : DWORD;
  end;

  TBlockDescription = packed record
    BlockType : BYTE;
    BlockSize : DWORD;
  end;

  TFullBlock = record
     Descr : TBlockDescription;
     Data : Pointer;
  end;

procedure ReadFile(AFileName : String);
var
  F : TFileStream;
  H : TFileHeader;
  B : Array Of TFullBlock;
  I : Integer;
begin
  F := TFileStream.Create(AFileName,fmOpenRead);
  Try
    F.ReadBuffer(H,SizeOf(TFileHeader));
    SetLength(B,H.BlocksCount);
    For I := 0 To H.BlocksCount-1 Do
      Begin
         F.ReadBuffer(B[i].Descr);
         GetMem(B[i].Data,B[i].BlockSize);
         F.ReadBuffer(B[i].Data^,B[i].BlockSize);
      End;
  Finally
    F.Free;
  End;
end;
Ответить с цитированием