![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Возможно ли вывести содержимое текстового файла, находящегося в архиве *.7z в memo и картинку в image не распаковывая файлы на жесткий диск?
Подключены 7z.dll и sevenzip.pas Помогите пожалуйста. |
|
#2
|
||||
|
||||
|
См. АПИ 7z.dll, можно вывести список, разархивировать (вроде в поток можно) отдельный файл.
|
|
#3
|
|||
|
|||
|
Я недавно начал программировать на делфи, всех мелочей не знаю. О 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
|
||||
|
||||
|
Правильно ругается, такой переменной в коде нет. А строкой выше, вообще каша намешана.
|
|
#5
|
|||
|
|||
|
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
|
|||
|
|||
|
Так сначала вывести список, потом выбрать файл, отправить его в поток...
правильно? |
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
|||
|
|||
|
Цитата:
|
|
#9
|
|||
|
|||
|
Извините
![]() Так правильно? Код:
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
|
||||
|
||||
|
Правильно. И предыдущий код работать будет, если его написать правильно, а не так как его предложил мифический "разработчик".
|
|
#11
|
|||
|
|||
|
Хорошо б, но так все равно выдает ошибку.
Код:
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;Код:
OpenStream(aStream, soReference); |
|
#12
|
|||
|
|||
|
Если 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;если 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; |
|
#13
|
||||
|
||||
|
У меня нет данного юнита, чтобы посмотреть как должно быть.
|
|
#14
|
|||
|
|||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
MemStream : TMemoryStream;
jpg : TJpegImage; //ошибка- Undeclared identifier: 'TJpegImage'
begin
MemStream := TMemoryStream.Create;
try
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile('test.7z');
for I := 0 to NumberOfItems - 1 do
if not ItemIsFolder[i] then
begin
MemStream.Clear;
ExtractItem(I, MemStream, False);
MemStream.Position := 0;
case I of
0 :
begin
jpg := TJPEGImage.Create;
try
jpg.LoadFromStream(MemStream);
Image1.Picture.Assign(jpg);
finally
jpg.Free;
end;
end;
1 : Memo1.Lines.LoadFromStream(MemStream);
end;
end;
end;
finally
MemStream.Free;
end;
end;Вместо TJpegImage пишу TGraphic. Картинка в архив запакована первой (*.jpg). После нажатия Button1 - ошибка: Project raised exception class EAbstractError with message 'AbstractError'. Код:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
MemStream : TMemoryStream;
jpg : TGraphic;
begin
MemStream := TMemoryStream.Create;
try
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile('test.7z');
for I := 0 to NumberOfItems - 1 do
if not ItemIsFolder[i] then
begin
MemStream.Clear;
ExtractItem(I, MemStream, False);
MemStream.Position := 0;
case I of
0 :
begin
jpg := TGraphic.Create;
try
jpg.LoadFromStream(MemStream);
Image1.Picture.Assign(jpg);
finally
jpg.Free;
end;
end;
1 : Memo1.Lines.LoadFromStream(MemStream);
end;
end;
end;
finally
MemStream.Free;
end;
end;Текст читается без картинки Код:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
MemStream : TMemoryStream;
begin
MemStream := TMemoryStream.Create;
try
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile('test.7z');
for I := 0 to NumberOfItems - 1 do
if not ItemIsFolder[i] then
begin
MemStream.Clear;
ExtractItem(I, MemStream, False);
MemStream.Position := 0;
case I of
0 : Memo1.Lines.LoadFromStream(MemStream);
end;
end;
end;
finally
MemStream.Free;
end;
end; |
|
#15
|
|||
|
|||
|
Согласен
![]() |