-
Всем привет!
Есть небольшая проблемка. Надо сделать поток, читающий из нескольких потоков БЕЗ создания (и объединения) этих нескольких потоков. Например, есть несколько файлов, если я делаю что то вроде
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) бы это сделать, пока не понятно...
Хелп плиз!!!
-
И что, Вам произвольный Seek тоже нужен?
-
Уже есть NewConcatStream в KOL.pas. Что значит без создания потоков - не понятно.
-
Владимир и NoUser, например, есть 1000 файлов, и как -
for i:=1 to 1000 do cs:=NewCompactStream(NewFileStream,cs); // для примера
ресурсы же не резиновые. Вот и как бы хотя бы на произвольное чтение это сделать?
-
> Вот и как бы хотя бы на произвольное чтение это сделать?
Для каждого нового чтения определяй, в какой файл попадает текущая обобщенная позиция. (Для ускорения вначале можно создать табличку.) И читай только из этого файла (один стрим) уже с локальным смещением.
-
идиотская цель от совершенного непонятия как работает ОС\железо
-
robt5, цели и их достижения бывают ох как разные. Проблема кстати решена.
-
и как?
|