MemoryStream тут совершенно не подходит(а если файлы в несколько гигов?)
Код:
function WriteBase(ListBox: TListBox; OutFile: String): Boolean;
var
I: Integer;
sz:int64;
InF, OutF:TFileStream;
begin
Result:=false;
try
OutF := TFileStream.Create(OutFile, fmCreate);
i:=ListBox.Count;
OutF.Write(i, SizeOf(Integer)); //сохраняем количество файлов
for I := 0 to ListBox.Count - 1 do
begin
InF := TFileStream.Create(ListBox.Items.Strings[i], fmOpenRead);
sz:=InF.Size;
OutF.Write(sz, SizeOf(Int64)); //сохраняем размер
OutF.CopyFrom(InF, sz); //сохраняем сам файл
InF.Free;
end;
Result := True;
finally
OutF.Free;
end;
end;
в итоге получаем файл такой структуры:
| Кол-во файлов n | Размер файла 1 | Файл 1 | ... | Размер файла n | Файл n |
для ускорения доступа после количества файлов можно записывать таблицу индексов с позициями начала каждого файла