Delphi ile 7zip kullanarak dosya sıkıştırma ve açma işlemlerini aşağıdaki şekilde kolaylıkla yapabilirsiniz. Hazırlanan kullanım örneğinde seçilen bir dosyanın password korumalı olarak sıkıştırılması ve tekrar arşivden çıkartılmasının temel adımları gösterilmiştir.
Edit: RAR5 desteğini aktifleştirmek için yapılması gereken adımlar aşağıdaki mesajda.
Gerekli araçlar:
1. 7zip dll
Güncel 7zip.dll için resmi site: https://www.7-zip.org/
2: 7zip Api
7zip.dll li kullanmak için gerekli olan api desteği Henri Gourvest tarafından github üzerinden paylaşıldı.
İlgili github linki: https://github.com/geoffsmith82/d7zip/tree/master
Github linkindeki sevenzip.pas dosyasını proje klasörünüze kopyalayın.
Ayrıca gerekli olan 7zip.dll x32 ve x64 sistemler için ayrı ayrı github proje ağacında \bin ve \bin64 içerisinde sunulmuştur. İsterseniz bu dll i kullanabilirsiniz, isterseniz resmi siteden 7zip i indirip içinden dll leri kendinizde çıkartabilirsiniz.
Sıkıştırma ve açma işlemlerini yapabilmek için işletim sisteminize (daha doğrusu uygulamanızı compile ettiğiniz hedef x32 veya x64e) uygun 7zip.dll dosyasını uygulamanız ile birlikte dağıtmanız yeterlidir.
Not: Windows arm64 tabanlı bir sistemde x32 ve x64 olarak derlendi ve test edildi.
Geri kalan kullanım ile ilgili açıklamalar kod örneği içerisinde yapıldı.
Edit: RAR5 desteğini aktifleştirmek için yapılması gereken adımlar aşağıdaki mesajda.
Gerekli araçlar:
1. 7zip dll
Güncel 7zip.dll için resmi site: https://www.7-zip.org/
2: 7zip Api
7zip.dll li kullanmak için gerekli olan api desteği Henri Gourvest tarafından github üzerinden paylaşıldı.
İlgili github linki: https://github.com/geoffsmith82/d7zip/tree/master
Github linkindeki sevenzip.pas dosyasını proje klasörünüze kopyalayın.
Ayrıca gerekli olan 7zip.dll x32 ve x64 sistemler için ayrı ayrı github proje ağacında \bin ve \bin64 içerisinde sunulmuştur. İsterseniz bu dll i kullanabilirsiniz, isterseniz resmi siteden 7zip i indirip içinden dll leri kendinizde çıkartabilirsiniz.
Sıkıştırma ve açma işlemlerini yapabilmek için işletim sisteminize (daha doğrusu uygulamanızı compile ettiğiniz hedef x32 veya x64e) uygun 7zip.dll dosyasını uygulamanız ile birlikte dağıtmanız yeterlidir.
Not: Windows arm64 tabanlı bir sistemde x32 ve x64 olarak derlendi ve test edildi.
Geri kalan kullanım ile ilgili açıklamalar kod örneği içerisinde yapıldı.
unit unit_main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm2 = class(TForm)
btn_compress: TButton;
btn_extract: TButton;
procedure btn_compressClick(Sender: TObject);
procedure btn_extractClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses sevenzip; // 7zip API uniti uses kısmına ekleniyor.
{$R *.dfm}
//-------------------------------------------------
// 7zip Dosya Sıkıştırma
//-------------------------------------------------
procedure TForm2.btn_compressClick(Sender: TObject);
var
Arch: I7zOutArchive; // OUT archive Sıkıştırma için
begin
Arch := CreateOutArchive(CLSID_CFormat7z);
// 1. parametre: Sıkıştırılacak path ve dosya adı
// 2. parametre: arşiv içerisindeki dosya adı ve arşiv içerisindeki klasör yapısı
// 'deneme\app.exe' şeklindeki kullanımda arşiv dosyası içerisine dosya ismi uygulama.exe -> deneme\app.exe olarak
// \deneme isimli alt klasör içerisine yerleştirilir.
// arşiv açıldığında, çıkarılan dosya \deneme\app.exe şeklinde klasör içerisinde olacaktır.
Arch.AddFile('C:\Delphi 7zip\Test File\uygulama.exe', 'uygulama.exe');
SetCompressionLevel(Arch, 5);
// Sıkıştırma algoritması
SevenZipSetCompressionMethod(Arch, m7BZip2);
// password ile korunan arşiv içerisindeki dosya isimlerini gizlemek için = true yapınız.
// True : password ile korunan arşiv dosyasını winrar vb. bir araç ile açmak istediğinizde
// arşiv içeriğini göstermek için önce şifreyi girmeniz gerekir.
// False: (veya bu satır comment edilirse) password ile korunan arşiv dosyası
// winrar vb. ile açıldığında arşiv içeriği gösterilir, dosyayı arşivden çıkartmak istediğimiz
// zamanda şifre sorulur.
SevenZipEncryptHeaders(Arch,true);
// arşiv için password
Arch.SetPassword('a1234');
// Sıkıştırılan dosyanın kaydedileceği path ve dosya ismi
Arch.SaveToFile('C:\Delphi 7zip\Test File\depo.zip');
end;
//-------------------------------------------------
// 7zip Dosya Açma
//-------------------------------------------------
procedure TForm2.btn_extractClick(Sender: TObject);
var
Arch: I7zINArchive; // IN archive Arşiv çıkartma için
begin
Arch := CreateINArchive(CLSID_CFormat7z);
// Arşiv şifresi
Arch.SetPassword('a1234');
// açılacak arşiv path ve dosya ismi
Arch.OpenFile('C:\Delphi 7zip\Test File\depo.zip');
// arşivin çıkartılacağı path
arch.ExtractTo('C:\Delphi 7zip\Test File\extract');
end;
end.


