Форум: "KOL";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизKolZLib Найти похожие ветки
← →
Евгений (2003-06-06 10:23) [0]Как используя KolZLib распаковать файл, находящийся в ресурсе, но при этом не сохранить его на диск, а создать новый PStream?
← →
Кладов (2003-06-06 11:52) [1]См. пример в KOLPNG.
← →
Евгений (2003-06-06 13:12) [2]Я пробую так:
PackStream := NewMemoryStream;
Resource2Stream(PackStream,HInstance,"DATA",RT_RCDATA);
try
( PackStream,nil) [2] Я пробую так:
PackStream := NewMemoryStream;
Resource2Stream(PackStream,HInstance,"DATA",RT_RCDATA);
try
EndStream := NewDecompressionStream(PackStream,nil);
finally
PackStream.Free;
end;
Но в результате ничег с EndStream не получается
← →
Кладов (2003-06-06 15:59) [3]В смысле не получается? А что вы с ним делаете? Может надо
Position := 0;
сделать, чтобы можно было теперь из него читать. И вообще, что даетShowMessage( Int2Str( EndStream.Size ) );
?
← →
Евгений (2003-06-06 16:55) [4]Пробовал и Position := 0, не получается, в смысле делал проверку как раз по EndSteam.Size, получаю значение -1.
← →
Кладов (2003-06-06 17:55) [5]Ну PackStream тоже до того как начинать его читать, надо в позицию 0 поставить. В примере я не вижу, чтобы это было сделано. Естественно, EndStream в итоге пустой.
← →
Евгений (2003-06-06 19:11) [6]Пробовал уже и так:
PackStream := NewMemoryStream;
Resource2Stream(PackStream,HInstance,"DATA",RT_RCDATA);
PackStream.Position := 0;
try
EndStream := NewDecompressionStream(PackStream,nil);
finally
PackStream.Free;
end;
Всё равно не работает... Но ладно, помогите пока разобраться с этой проблемой:
ugp.dat (697573) - предварительно упакованный файл ugp_u.dat (712012)
Вариант 1:
PackStream := NewReadFileStream("ugp.dat");
try
WriteStream := NewWriteFileStream("ugp_u.dat");
try
PackStream.Read(Size,4);
EndStream := NewDecompressionStream(PackStream,nil);
CopyFrom(EndStream,WriteStream,Size);
PackStream.Free;
EndStream.Read(Size,4);
finally
EndStream.Free;
end;
finally
WriteStream.Free;
end;
Всё отлично работает, на выходе получаем распакованный файл ugp_u.dat (712012).
Вариант 2:
PackStream := NewMemoryStream;
Resource2Stream(PackStream,HInstance,"DATA",RT_RCDATA);
try
WriteStream := NewWriteFileStream("ugp_u.dat");
try
PackStream.Read(Size,4);
EndStream := NewDecompressionStream(PackStream,nil);
CopyFrom(EndStream,WriteStream,Size);
PackStream.Free;
EndStream.Read(Size,4);
finally
EndStream.Free;
end;
finally
WriteStream.Free;
( ?) [6]Пробовал уже и так:
PackStream := NewMemoryStream;
Resource2Stream(PackStream,HInstance,"DATA",RT_RCDATA);
PackStream.Position := 0;
try
EndStream := NewDecompressionStream(PackStream,nil);
finally
PackStream.Free;
end;
Всё равно не работает... Но ладно, помогите пока разобраться с этой проблемой:
ugp.dat (697573) - предварительно упакованный файл ugp_u.dat (712012)
Вариант 1:
PackStream := NewReadFileStream("ugp.dat");
try
WriteStream := NewWriteFileStream("ugp_u.dat");
try
PackStream.Read(Size,4);
EndStream := NewDecompressionStream(PackStream,nil);
CopyFrom(EndStream,WriteStream,Size);
PackStream.Free;
EndStream.Read(Size,4);
finally
EndStream.Free;
end;
finally
WriteStream.Free;
end;
Всё отлично работает, на выходе получаем распакованный файл ugp_u.dat (712012).
Вариант 2:
PackStream := NewMemoryStream;
Resource2Stream(PackStream,HInstance,"DATA",RT_RCDATA);
try
WriteStream := NewWriteFileStream("ugp_u.dat");
try
PackStream.Read(Size,4);
EndStream := NewDecompressionStream(PackStream,nil);
CopyFrom(EndStream,WriteStream,Size);
PackStream.Free;
EndStream.Read(Size,4);
finally
EndStream.Free;
end;
finally
WriteStream.Free;
end;
На выходе получаем файл ugp_u.dat размером 1243744 (?), состоящий из 00.
Ссылка на ресурс верная! (Точно! Проверено. Но если указывать любую другую получим тот же результат).
И ещё. И в первом, и во втором варианте (и в любом другом при декомпрессии), EndStream.Size возвращает -1. И вообще, с этим потоком нельзя работать, можно только скопировать в другой (WriteFileStream), и работать потом с другим (если скопировать в MemoryStream, использовать его невозможно).
Обьясните, пожалуйста.
← →
Кладов (2003-06-06 20:40) [7]
Position := 0;
- до того, как читать из потока сразу после записи в него Stream2Stream, Resource2Stream, ...
Тяжелая была неделя, наверное, надо отдохнуть :)
← →
Евгений (2003-06-06 22:11) [8]Благодарю...
← →
Юрец (2003-06-07 16:29) [9]Рас уж заговорили о KOLZLib, тогда такой вопрос:
Как использовать ZLibEvent для отображения процедуры упаковки?
И еще если можно какой нибудь бы алгоритм (по быстрее) упаковки и распаковки нескольких файлов при помощи ZLib и др.
Заранее пасиба.
← →
Centronix (2003-06-08 13:39) [10]
> Как использовать ZLibEvent для отображения процедуры упаковки?
В теории он вызывается периодически в процессе сжатия данных (когда буффер заполняется в очередной раз). А для обновления прогрессбара надо знать сколько байт вы хотите в него записать (например свойство Size исходного потока) и сколько вы в него уже записали (свойство Position потока созданного процедурой NewCompressionStream).
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c