Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 5
Всего онлайн: 5
Зарегистрировано юзеров: 6382
Комментариев на сайте: 646
Новый юзер: Fenrikinosdoosurf



Последние комментарии
c
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
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[i] then //ExtractItem(items[i], Steam, False); - как ей пользоваться в душе не понимаю... ExtractTo(DestDir); end; finally Result:= True; end; end;
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...



Мы в соцсетях
c
Delphi
Урок 71 - Работа с сжатыми файлами

В этом уроке мы рассмотрим библиотеку "7z.dll", с её помощью можно распаковывать архивы такого типа:

     Zip, BZ2, Rar, Arj, Z, Lzh, 7z, Cab, Nsis, Lzma, Pe, Elf, Macho, Udf, Xar, Mub, Hfs, Dmg, Compound, Wim, Iso, Bkf, Chm, Split, Rpm, Deb, Cpio, Tar, GZip

   Практически все существующие архивы. Попытаемся распаковать архив типа Zip. Для этого создадим проект и сам архив, назовем его 1.zip и положим рядом с программой.

   На форму вытащим кнопочку и напишем в событии OnClick вот такой код:

begin
  // Распаковывает файлы 
  with CreateInArchive(CLSID_CFormatZip) do
   begin
     OpenFile(ExtractFilePath(ParamStr(0)) + '1.zip');
     ExtractTo(ExtractFilePath(ParamStr(0)) + '1');
   end;
end;
   После, рядом с программой появится папка "1", с содержимым архива. И не забудьте подключить в Uses модуль SevenZip, его вы найдете в конце данного урока.

   Также можно создать архив:
begin
  // Добавляет файлы 
  with CreateInArchive(CLSID_CFormatZip) do
   begin
	 Arch.AddFile('Имя файла');
	 Arch.SaveToFile('Имя архива');
   end; 


   Задать уровень сжатия можно функцией SetCompressionLevel(Arch: I7zOutArchive, Level: Integer);. Как видите все просто.

   Для работы с другими архивами надо изменить константу CLSID_CFormatZip . Например для .Rar архива, константа будет иметь вид CLSID_CFormatRar, полный список можно увидеть кликнув по константе с зажатым Ctrl.

Удачи!
Встретимся в следующем уроке!

Зарегистрируйтесь или авторизуйтесь, чтобы скачать.

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 2 Августа 2013
Просмотров:

Урок 70 - Динамические библиотеки DLL Урок 72 - Получение хеша файла

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.



аватар Добавил(а): Oleg_Guz [Новичок] Дата: 2013-12-04
Работает на УРА!




аватар Добавил(а): diggiti9105 [Новичок] Дата: 2013-12-13
выдает ошибку в юните 7z в начале, пишет не допустимы входной файл "п", если удалить он в другом месте выдает ошибку




аватар Добавил(а): man1207 [Новичок] Дата: 2014-03-15
diggiti9105, открой файл блокнотом и в меню Кодировки выбери UTF-8 (без BOM), сохрани и будет тебе счастье.




аватар Добавил(а): nik095 [Новичок] Дата: 2014-08-01
А никто не знает, как можно получить ClassId для CreateInArchive? Вариант посмотреть расширение файла архива не подходит )




аватар Добавил(а): Zeld [Новичок] Дата: 2014-08-17
Чет у меня ни как не хочет работать, 7z.dll кинул в папку с проектом. SevenZip в Uses прописал. Но на на SevenZip в uses и ругается(




аватар Добавил(а): Zeld [Новичок] Дата: 2014-08-17
Так, с SevenZip вопрос решил. Теперь, при выполнение распаковки архива, программа ругается на 7z.dll, хотя в папке всё ещё dll лежит




аватар Добавил(а): Alexandr_7 [Новичок] Дата: 2016-01-21
Тоже самое может кто поможет решить проблему. SevenZip скачал от сюда. а САМИ БИБЛИОТЕКИ СПЕР У 64 БИТНОЙ 7Zip обе версии как 32 так и просто 7zip и положил вместе с проэктом.




аватар Добавил(а): Alexandr_7 [Новичок] Дата: 2016-01-21
Решил проблему скачав 7zip для 32 битной винды и взяв от туда 7z.dll Но вопрос следующий. Как можно вывести процесс распаковки Помогите плиз.




аватар Добавил(а): Oleg_Guz [Новичок] Дата: 2016-05-06
Arch.SetProgressCallback(nil,ProgressCallback);




аватар Добавил(а): Tino [Новичок] Дата: 2016-10-22
--------------------------- Project1 --------------------------- Error loading library 7z.dll. --------------------------- ОК ---------------------------




аватар Добавил(а): niaz-gtn [Новичок] Дата: 2017-09-06
7z.dll - приложите.




аватар Добавил: Aqel [Новичок] Дата: 2018-08-15
Вопрос как распаковать только определённые папки/файлы?




аватар Добавил(а): Pingitrus [Новичок] Дата: 2018-09-04
Есть еще кто нибудь живой на этом сайте, кто сможет помочь? Так то все работает, zip и rar распаковывает, но у меня есть файл dat который сжат GZip, почему то его не удается распаковать или так не получится так как этот файл не является архивом или является?)) пишет ошибку что неверная функция




аватар Добавил: Aqel [Новичок] Дата: 2018-09-12
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...




аватар Добавил: Aqel [Новичок] Дата: 2018-09-27
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[i] then //ExtractItem(items[i], Steam, False); - как ей пользоваться в душе не понимаю... ExtractTo(DestDir); end; finally Result:= True; end; end;