Форум: "KOL";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизПроблема потоков в 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 вся ветка
Форум: "KOL";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c