Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.06.2012, 19:47
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию Как прочитать файлы из архива 7zip?

Возможно ли вывести содержимое текстового файла, находящегося в архиве *.7z в memo и картинку в image не распаковывая файлы на жесткий диск?
Подключены 7z.dll и sevenzip.pas
Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 24.06.2012, 20:44
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

См. АПИ 7z.dll, можно вывести список, разархивировать (вроде в поток можно) отдельный файл.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 24.06.2012, 21:25
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

Я недавно начал программировать на делфи, всех мелочей не знаю. О 7zip читал в readme, там написано как отправить в поток, не уверен что вообще отправляет.
Вот код Open stream:

with CreateInArchive(CLSID_CFormat7z) do
begin
OpenStream(T7zStream.Create(TFileStream.Create('c: \test.7z', fmOpenRead), soOwned));
OpenStream(aStream, soReference); // здесь ругается: Undeclared indentifier:'aStream'
...
end;

А простое извлечение (на жесткий диск) идет хорошо.
Ответить с цитированием
  #4  
Старый 24.06.2012, 21:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Правильно ругается, такой переменной в коде нет. А строкой выше, вообще каша намешана.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 24.06.2012, 21:40
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

Extract to path
Код:
 with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenFile('c:\test.7z');
   ExtractTo('c:\test');
 end;

Open stream
Код:
 with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenStream(T7zStream.Create(TFileStream.Create('c:\test.7z', fmOpenRead), soOwned));
   OpenStream(aStream, soReference); // здесь ругается: Undeclared indentifier:'aStream'
   ...
 end;

Это предлагают разработчики
Ответить с цитированием
  #6  
Старый 24.06.2012, 21:47
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

Так сначала вывести список, потом выбрать файл, отправить его в поток...
правильно?
Ответить с цитированием
  #7  
Старый 24.06.2012, 21:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Aptic7
Open stream
Код:
 with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenStream(T7zStream.Create(TFileStream.Create('c:\test.7z', fmOpenRead), soOwned));
   OpenStream(aStream, soReference); // здесь ругается: Undeclared indentifier:'aStream'
   ...
 end;

Это предлагают разработчики
За такой код, на обед без сладкого оставлять нужно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 24.06.2012, 22:05
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от Aptic7
Это предлагают разработчики
это предлагает чел,написавший sevenzip.pas к разработчикам 7zip это никак не относится вообще
Ответить с цитированием
  #9  
Старый 24.06.2012, 22:05
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

Извините
Так правильно?
Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sevenzip;
Код:
 procedure TForm1.Button1Click(Sender: TObject);
begin
 with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenFile('c:\test.7z');
   ExtractTo('c:\test');
 end;
end;
Ответить с цитированием
  #10  
Старый 24.06.2012, 22:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Правильно. И предыдущий код работать будет, если его написать правильно, а не так как его предложил мифический "разработчик".
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 24.06.2012, 22:19
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

Хорошо б, но так все равно выдает ошибку.
Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sevenzip;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenStream(T7zStream.Create(TFileStream.Create('d:\test.7z', fmOpenRead), soOwned));
   OpenStream(aStream, soReference);
 end;
end;
Понимаю что aStream это процедура или функция не описана в sevenzip.pas. Вот убрал эту сомнительную строчку
Код:
  OpenStream(aStream, soReference);
тогда как мне проверить что архив или файл отправлен в поток?
Ответить с цитированием
  #12  
Старый 24.06.2012, 22:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

aStream - переменная, которая должна ссылаться на уже созданный поток. Но она нигде не декларирована и не инициализирована.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 24.06.2012, 22:39
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

Если aStream переменная, но вот так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
aStream:integer;
begin
with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenStream(T7zStream.Create(TFileStream.Create('d:\test.7z', fmOpenRead), soOwned));
   OpenStream(aStream, soReference);
 end;
end;
ошибка- Incompatible types: 'Integer' and 'IInStream'

если aStream:IInStream;
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
aStream:IInStream;
begin
with CreateInArchive(CLSID_CFormat7z) do
 begin
   OpenStream(T7zStream.Create(TFileStream.Create('d:\test.7z', fmOpenRead), soOwned));
   OpenStream(aStream, soReference);
 end;
end;
ошибка: Too many actual parameters
Ответить с цитированием
  #14  
Старый 24.06.2012, 22:42
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У меня нет данного юнита, чтобы посмотреть как должно быть.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 24.06.2012, 22:56
Aptic7 Aptic7 вне форума
Прохожий
 
Регистрация: 24.06.2012
Сообщения: 11
Репутация: 10
По умолчанию

юнит, длл и readme
Вложения
Тип файла: rar 7Z.RAR (287.7 Кбайт, 132 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025