Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2014, 13:57   #1
RUSlan48
Пользователь
 
Аватар для RUSlan48
 
Регистрация: 06.12.2009
Сообщений: 65
Вопрос Zip-архив

Все здравствуйте!

Есть такая цель: узнать автора книги в формате ePub.
Насколько я понял, ePub - это просто zip-архив, в котором есть папка OEBPS, а в ней есть файлы, в которых хранится информация о книге.

Собственно, вопрос: как можно открыть эти самые файлы, если можно, не распаковывая архив на диск?

Нашёл в TZipForge такую процедуру:
Код:
procedure ExtractToBuffer(ConstFileName: WideString; var Buffer:Untyped; Count: Integer; StartPosition:Int64);
Цитата:
Description
Use ExtractToBuffer to decompress Count bytes of data stored in the file inside the archive to memory buffer.

The FileName parameter specifies file name being extracted.

Buffer is an existing memory buffer. Buffer size should be greater or equal number of bytes specified by Count parameter.

Count specifies size in bytes of the data being extracted from the archive.
Как ей пользоваться я не понял, т.е. если Count и StartPosition - это сколько и откуда копировать, то как узнать, и для чего тогда вообще
var Buffer:Untyped?
Делай что должен, и будь что будет

Последний раз редактировалось RUSlan48; 15.02.2014 в 18:11.
RUSlan48 вне форума Ответить с цитированием
Старый 15.02.2014, 18:19   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а куда копировать-то собрались?
Цитата:
это сколько и откуда копировать, то как узнать, и для чего тогда вообще...
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.02.2014, 18:36   #3
RUSlan48
Пользователь
 
Аватар для RUSlan48
 
Регистрация: 06.12.2009
Сообщений: 65
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
а куда копировать-то собрались?
да мне бы хоть куда-нибудь

какие есть варианты?
Clipboard?

А переменная Buffer должна быть указателем?
Делай что должен, и будь что будет
RUSlan48 вне форума Ответить с цитированием
Старый 16.02.2014, 22:15   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

копировать из ... начиная с ... в ... в количестве ...
поставьте вместо ... имена из
Цитата:
procedure ExtractToBuffer(ConstFileName: WideString; var Buffer:Untyped; Count: Integer; StartPosition:Int64);
Цитата:
если Count и StartPosition - это сколько и откуда копировать, то как узнать, и для чего тогда вообще
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.02.2014, 22:09   #5
RUSlan48
Пользователь
 
Аватар для RUSlan48
 
Регистрация: 06.12.2009
Сообщений: 65
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
копировать из ... начиная с ... в ... в количестве ...
поставьте вместо ... имена из
Я не совсем понял

Смысл параметров процедуры я более-менее понял, я не пойму как ей воспользоваться в условиях данной задачи, а именно: как определить с какого места и сколько копировать, если файл находится в архиве?
И в каком виде это копировать, т.е. в переменную какую-то или как?

Буду признателен за пример
Делай что должен, и будь что будет
RUSlan48 вне форума Ответить с цитированием
Старый 18.02.2014, 23:18   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

RUSlan48 Всё гораздо проще.

Код:
 var Stream: TMemoryStream;
 TS: TStringList;
begin
 TS:= TStringList.Create;
 Stream:= TMemoryStream.Create;
 Archiver.ExtractToStream('OEBPS\about.xhtml', Stream);
 Stream.Position := 0;
 TS.LoadFromStream(Stream);
 Stream.Free;
И Ищи в TS.Text своего автора. Либо используй StringStream, или MemoryStream;

Последний раз редактировалось doktor255; 19.02.2014 в 00:23.
doktor255 вне форума Ответить с цитированием
Старый 19.02.2014, 21:56   #7
RUSlan48
Пользователь
 
Аватар для RUSlan48
 
Регистрация: 06.12.2009
Сообщений: 65
Хорошо

doktor255, спасибо огромное! Как раз то, что нужно.
Про потоки я как-то не подумал...
Делай что должен, и будь что будет
RUSlan48 вне форума Ответить с цитированием
Старый 20.02.2014, 01:44   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Бывает, когда простые вещи не замечаешь. Так программисты и приобретают опыт. Пожалуйста .
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программно распаковать zip-архив Dux Общие вопросы Delphi 19 23.08.2013 09:38
Zip архив File list bigsmall20 Visual C++ 2 19.03.2013 03:22
создать zip архив без сжатия frommars Visual C++ 0 12.03.2012 16:07
как распакавать zip-архив Олька Помощь студентам 3 02.09.2008 21:54
Zip архив urels Общие вопросы Delphi 7 26.04.2008 17:31