Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
7th
Окт
Распаковка определённых файлов/папок из 7zip (sevenzip.pas)
Posted by obzor under Delphi
Использую код:
Код:
uses
...sevenzip, ...
function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;
begin
if total then
Form1.sprgrsbr1.Max:= value
else
Form1.sprgrsbr1.Position:= value;
Result:= S_OK;
end;
function Decompress(FileName, DestDir, ArcFname: String; ArcDir: Boolean ): Boolean;
var
i: Integer;
ItP: string;
items: array[1..11] of Cardinal;
sprgrsbr1: TsProgressBar;
begin
Result:= False;
Application.ProcessMessages;
try
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile(FileName);
SetProgressCallback(sprgrsbr1, ProgressCallback);
for i:= 1 to NumberOfItems - 1 do
if not ItemIsFolder then
//ExtractItem(items, Steam, False); - как ей пользоваться в душе не понимаю...
ExtractTo(DestDir);
end;
finally
Result:= True;
end;
end;
Как распаковать только нужные, кто знает подскажите..?
Вот файлы 7zip
Всё там можно извлечь и по одиночке, поискав пусть в списке файлов и извлечь конкретный объект по его индексу.
Писал когда-то такую вспомогательную функцию:
function SevenZip_ExtractFile(const aInterf: I7zInArchive; const aPath: string;
const aSavePath: string): Boolean;
var
i, indx: Integer;
fs: TFileStream;
s1, s2: string;
begin
Result := False;
indx := -1;
for i := 0 to aInterf.NumberOfItems - 1 do
begin
if (not aInterf.ItemIsFolder) then
begin
s1 := LowerCase(Trim((aInterf.ItemPath + aInterf.ItemName)));
s2 := LowerCase(Trim(aPath));
if (s1 = s2) then
begin
indx := i;
Break;
end;
end;
end;
if (indx <> -1) then
begin
try
fs := TFileStream.Create(aSavePath, fmCreate or fmOpenWrite);
try
aInterf.ExtractItem(indx, fs, False);
Result := True;
finally
FreeAndNil(fs);
end;
except
Result := False;
end;
end;
end;
Первое — открытый интерфейс архива.
Второе — путь к тому что распаковать,
третье — куда распокавать
На выход:
true — распаковано
false — не распаковано.
В любой непонятной ситуации — false.
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)