Показать сообщение отдельно
  #2  
Старый 14.10.2010, 21:27
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

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 |
для ускорения доступа после количества файлов можно записывать таблицу индексов с позициями начала каждого файла
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием