Конференция "KOL" » Объединение нескольких PStream
 
  • ParanoiS (19.10.13 13:31) [0]
    Всем привет!

    Есть небольшая проблемка. Надо сделать поток, читающий из нескольких потоков БЕЗ создания (и объединения) этих нескольких потоков. Например, есть несколько файлов, если я делаю что то вроде

    Files:PStrList;
    sIn,sOut:PStream;
    //////////////////////////
    sIn := NewManyFilesStream(Files);
    sOut := NewWriteFileStream('outfile');
    Stream2Stream(sOut, sIn, sIn.Size);

    то в outfile бы записалось бы содержимое всех файлов подряд.

    Сделал шапку

    var  
     RFsMethods: TStreamMethods = (
       fSeek:_Seek;
       fGetSiz:_GetSiz;
       fSetSiz:_NoSS;
       fRead:_Read;
       fWrite:_NoRW;
       fClose:_Close;
     );

    function NewReadManyStream(Files:PStrList):PStream;
    var
     ffd:PFindFileData;
     i: Integer;
    begin
     RFsMethods.fCustom:=NewList;
     for i := 0 to Files.Count - 1 do
       with PList(RFsMethods.fCustom)^ do begin
         New(ffd);
         if Find_First(Files.Items[i],ffd^) then begin
           Add(ffd);
           Find_Close(ffd^);
         end else Dispose(ffd);
       end;
     Result:=_NewStream(RFsMethods);
    end;

    но как проще (и - главное, поменьше в .exe) бы это сделать, пока не понятно...

    Хелп плиз!!!
  • NoUser © (19.10.13 15:39) [1]
    И что, Вам произвольный Seek тоже нужен?
  • Vladimir Kladov © (20.10.13 13:52) [2]
    Уже есть NewConcatStream в KOL.pas. Что значит без создания потоков - не понятно.
  • ParanoiS (23.10.13 17:38) [3]
    Владимир и NoUser, например, есть 1000 файлов, и как -

    for i:=1 to 1000 do cs:=NewCompactStream(NewFileStream,cs); // для примера

    ресурсы же не резиновые. Вот и как бы хотя бы на произвольное чтение это сделать?
  • NoUser © (23.10.13 18:49) [4]
    > Вот и как бы хотя бы на произвольное чтение это сделать?

    Для каждого нового чтения определяй, в какой файл попадает текущая обобщенная позиция. (Для ускорения вначале можно создать табличку.)
    И читай только из этого файла (один стрим) уже с локальным смещением.
  • robt5 (25.10.13 10:52) [5]
    идиотская цель от совершенного непонятия как работает ОС\железо
  • ParanoiS (25.11.13 02:45) [6]
    robt5,  цели и их достижения бывают ох как разные. Проблема кстати решена.
  • NoUser © (25.11.13 21:56) [7]
    и как?
 
Конференция "KOL" » Объединение нескольких PStream
Есть новые Нет новых   [134454   +44][b:0][p:0]