Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Проблема потоков в KOL (Stream2Stream)   Найти похожие ветки 

 
Dentall ©   (2004-01-02 21:33) [0]

Не получается скопировать Stream2Stream когда исходный поток - MemoryStream, а поток назначения - файл. Из файла в файл работает. В чем проблема?


 
Boguslaw   (2004-01-03 00:03) [1]

Probably should been scrolled to the beginning (assume You wrote something to MemoryStream before)
so try :
MemoryStream.Seek(0,spBegin) just before Stream2Stream

Happy New Year !


 
Che   (2004-01-03 14:41) [2]

Скорее всего проблемы с потоком из за позиции. Сужу по себе :)Забываю я про нее... Например надо дописать в конец потока MemoryStream данные из файла

xxxx := NewMemoryStream;
// тут в это xxxx что нибуть пишем
ffff := NewReadFileStream("f.txt");
xxxx.Position :=0; // <- а вот если забыть не заработает
Stream2StreamEx(ffff,xxxx,xxxx.Size);

Всех с НГ.


 
Dentall ©   (2004-01-05 14:11) [3]

Из модуля id3v2.pas (есть на этом сайте - архив Tags.zip). При вызове SaveToFile файл становится 0 длины. Попробовал оба вышеуказыннх совета - не помогло ... :( Привожу кусок кода (для тех кто поленится заглянуть в указанный модуль)


function RebuildFile(const FileName: string; TagData: PStream): Boolean;
var
 Tag: TagInfo;
 Source, Destination: PStream;
 BufferName: string;
begin
 { Rebuild file with old file data and new tag data (optional) }
 Result := false;
 if (not FileExists(FileName)) or (FileSetAttr(FileName, 0) <> 0) then exit;
 if not ReadHeader(FileName, Tag) then exit;
 if (TagData = nil) and (Tag.ID <> ID3V2_ID) then exit;
 try
   { Create file streams }
   BufferName := FileName + "~";
   Source := NewFileStream(FileName, ofOpenRead or ofShareExclusive);
   Destination := NewFileStream(BufferName, ofCreateNew);
   { Copy data blocks }
   if Tag.ID = ID3V2_ID then Source.Seek(GetTagSize(Tag), spBegin);
   if TagData <> nil then Stream2Stream(Destination, TagData, TagData.Size);
//    source.Seek(0,spBegin);
   Stream2Stream(Destination, Source, Source.Size - Source.Position);
   { Free resources }
   Source.Free;
   Destination.Free;
   { Replace old file and delete temporary file }
   if DeleteFile(PChar(FileName)) and MoveFile(PChar(BufferName), PChar(FileName)) then
     Result := true
   else Str2Int("");
 except
   if FileExists(BufferName) then DeleteFile(PChar(BufferName));
 end;
end;

function SaveTag(const FileName: string; Tag: TagInfo): Boolean;
var
 TagData: PStream;
 Iterator, FrameSize: Integer;
begin
 TagData := NewMemoryStream;
 BuildHeader(Tag);
 TagData.Write(Tag, 10);
 for Iterator := 1 to ID3V2_FRAME_COUNT do
   if Tag.Frame[Iterator] <> "" then
   begin
     TagData.WriteStr(ID3V2_FRAME_NEW[Iterator]);
     FrameSize := Swap32(Length(Tag.Frame[Iterator]) + 1);
     TagData.Write(FrameSize, SizeOf(FrameSize));
     TagData.WriteStr(#0#0#0 + Tag.Frame[Iterator]);
   end;
 ///TagData.Seek(0,spBegin);
 //TagData.position:=0;
 Result := RebuildFile(FileName, TagData);
 TagData.Free;
end;


 
mmn   (2004-01-05 16:43) [4]

Только что попробовал использовать метод SaveToFile файла id3v2.pas из архива Audio Tools Library (портированным в KOL Матвеевым Дмитрием). Всё записалось нормально. Если мне не изменяет склероз, то скачал я его с этого сайта.


 
Dentall ©   (2004-01-05 19:26) [5]

Действительно, скачаннная с этого сайта работает :)... Кстати, у нового модуля размер больше...



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
14-1084302337
Drakon
2004-05-11 23:05
2004.05.30
Математические алгоритмы вычисления Sin, Cos, Tan


3-1083830612
Top100
2004-05-06 12:03
2004.05.30
индекс поля в DBGrid


3-1084364382
Korefey
2004-05-12 16:19
2004.05.30
Delphi, SQL


14-1084363364
WondeRu
2004-05-12 16:02
2004.05.30
Delphi 8. Где OpenGL, DirectX и т.п.?


14-1083869414
lak
2004-05-06 22:50
2004.05.30
вопрос html