Главная страница
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.024 c
7-1083076227
Medic
2004-04-27 18:30
2004.05.30
удалённое соединение


11-1072004881
Vladimir Kladov
2003-12-21 14:08
2004.05.30
Версия 1.88


14-1084092082
nikkie
2004-05-09 12:41
2004.05.30
Новая версия DMClient - 2.1.1


6-1081768676
Геннадий
2004-04-12 15:17
2004.05.30
Как создать вложение при отправке электронного письма? idSMTP


9-1073923296
RosTO
2004-01-12 19:01
2004.05.30
Полупрозрачность и Blur!!