Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-93834
Builder
2004-02-18 18:02
2004.02.29
рабочий стол


1-93935
mod
2004-02-18 15:19
2004.02.29
разархивация


14-94113
ИМХО
2004-02-09 00:39
2004.02.29
Абрамович заарканил Роналдо и Роберто Карлоса


1-93909
Ilg
2004-02-08 14:31
2004.02.29
Handle главного окна


14-94099
ИМХО
2004-02-09 20:38
2004.02.29
Динамо Киев: в чем причина популярности команды в Советское время





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский