Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi 7zip Password lü Dosya Sıkıştırma ve Açma + Bonus RAR5 Desteği
#1
Lightbulb 
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ı.

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.
Cevapla
#2
Hocam önclikle emeğinize sağlık.

X bi dosyayı rar ile sıkıştırıyorum. açmaya çalıştığımda..: "Yanlşı işlev" hatası veriyor..

GtHub da rar desteğini de söylemiş ama nafile.. (Bu arada Delphi 7 kullanıyorum.)..

Hocam 7z uzantılı dosyaları açıyor fakat rar lı dosyaları maalesef.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#3
Üstadım arşiv hazırlama ve açma işlemini yine siz yapacaksanız, uygulamanıza özel sıkıştırma ve güncelleme çıkarma aracı yazarak 7zipi kullanabilirsiniz.

Rar kullanmanızın özel bir nedeni varsa aşağıdaki yöntemi kullanarak rarlı dosyayı açabilirsiniz.

Rar4 arşiv formatını destekliyor, güncel olan rar5 arşiv formatında yanlış işlev hatası alırsınız. Güncel winrar uygulamasında varsayılan arşiv formatı rar5 (arayüzdeki gösterim rar) kullanılıyor.


argmg2m.png

var
 Arch: I7zINArchive;  // IN archive Arşiv çıkartma için
begin
 Arch := CreateINArchive(CLSID_CFormatRar);  // arşiv formatı RAR seçili

 // Arşiv şifresi
 Arch.SetPassword('a1234');

 // açılacak arşiv path ve dosya ismi
 Arch.OpenFile('C:\3\depo2.rar'); // Dikkat !!!
                                  // RAR4 versiyonuna göre sıkıştırılmış olması gerekiyor.
                                  // RAR5 formatı (güncel winrarda bu varsayılan) açamıyor.

 // arşivin çıkartılacağı path
 arch.ExtractTo('C:\3\extract');


end;
Cevapla
#4
Rar5 arşiv formatını açmak için sevenzip.pas içerisine aşağıdaki işaretlenen satırı ekleyiniz.

577. satırdaki const tanımlarına ilgili satırı ekleyiniz.

const
 CLSID_CFormatZip      : TGUID = '{23170F69-40C1-278A-1000-000110010000}'; // zip jar xpi
 CLSID_CFormatBZ2      : TGUID = '{23170F69-40C1-278A-1000-000110020000}'; // bz2 bzip2 tbz2 tbz
 CLSID_CFormatRar      : TGUID = '{23170F69-40C1-278A-1000-000110030000}'; // rar r00
 CLSID_CFormatArj      : TGUID = '{23170F69-40C1-278A-1000-000110040000}'; // arj
 CLSID_CFormatZ        : TGUID = '{23170F69-40C1-278A-1000-000110050000}'; // z taz
 CLSID_CFormatLzh      : TGUID = '{23170F69-40C1-278A-1000-000110060000}'; // lzh lha
 CLSID_CFormat7z       : TGUID = '{23170F69-40C1-278A-1000-000110070000}'; // 7z
 CLSID_CFormatCab      : TGUID = '{23170F69-40C1-278A-1000-000110080000}'; // cab
 CLSID_CFormatNsis     : TGUID = '{23170F69-40C1-278A-1000-000110090000}';
 CLSID_CFormatLzma     : TGUID = '{23170F69-40C1-278A-1000-0001100A0000}'; // lzma
 CLSID_CFormatLzma86   : TGUID = '{23170F69-40C1-278A-1000-0001100B0000}'; // lzma 86
 CLSID_CFormatXz       : TGUID = '{23170F69-40C1-278A-1000-0001100C0000}'; // xz
 CLSID_CFormatPpmd     : TGUID = '{23170F69-40C1-278A-1000-0001100D0000}'; // ppmd

 CLSID_CFormatRar5     : TGUID = '{23170F69-40C1-278A-1000-000110CC0000}'; // Rar5 ----- frmman


Kullanımı:

var
 Arch: I7zINArchive;  // IN archive Arşiv çıkartma için
begin
 Arch := CreateINArchive(CLSID_CFormatRar5);  // <--- !!!! arşiv formatı RAR5 seçili

 // Arşiv şifresi
 Arch.SetPassword('a1234');

 // açılacak arşiv path ve dosya ismi
 Arch.OpenFile('C:\3\depo.rar'); // Dikkat !!!  rar5 arşiv formatında sıkıştırılmış dosya

 // arşivin çıkartılacağı path
 arch.ExtractTo('C:\3\extract2');


end;
Cevapla
#5
Evet maalesef öyle sanırım.. RAR la sıkıştıtıkrne zip seçmek gerekiyor..

CLSID_CFormatRar5 : TGUID = '{23170F69-40C1-278A-1000-000110CC0000}'; // Rar5 ----- frmman bu satırı dün ekledim. ama halen yanlış işlevde takıldı kaldı..
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#6
Küçük bir ayrıntıyı gözden kaçırınca... Herşey için teşekkürler hocam..

CLSID_CFormatRar5

var
 Arch: I7zINArchive; // IN archive Arşiv çıkartma için
begin
 Arch := CreateINArchive(CLSID_CFormatRar5);
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#7
Teşekkürler paylaşımınız için.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 1.220 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 1.076 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 660 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 2.181 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 3.131 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi