TJclCompressArchive (проект Джедай).Как выбрать формат сжатия? - PullRequest
2 голосов
/ 08 декабря 2011

Используя Delphi XE на Win7 x64, имейте Jedi Class Library ver. 3.45 и 7z.dll вер. 9,20

Uses .., jclcompression;

procedure TForm1.Button1Click(Sender: TObject);
const
   an = 'C:\1.7z';
   fn = 'C:\1.txt';
var Arc: TJclCompressArchive;
    Ext: TJclCompressArchiveClass;

begin
   Ext := GetArchiveFormats.FindCompressFormat(an);
   Arc := Ext.Create(an);
   Arc.AddFile(ExtractFileName(fn), fn);
   Arc.Password:='123';

   // arc. .. compresslevel:= 0..9 (or store..ultra)
   // arc. .. compressmethod:= (lzma,lzma,bzip2,ppmd)
   // arc. .. dictionarysize:= (1 shl 1..30)
   // arc. .. comressheader:= true-false
   // arc. .. cryptalgorithm:= ??? aes256 only?
   // arc. .. threads:= 1..2
   // arc. .. cryptheader:= true-false

   Arc.Compress;

end;

Как выбрать параметры сжатия, показанные выше в виде комментариев, с помощью "//"?

Документация джедая практически отсутствует, может быть кто-то сталкивался с такой проблемой?

Пробовал несколько разных версий «задания» с 7z: tSevenZip, SevenZipVcl, SevenZip Api, но пришел к выводу, что самая свежая версия для работы с 7z.dll у проекта Jedi.

1 Ответ

7 голосов
/ 08 декабря 2011

Специфические параметры 7z реализуются классом TJcl7zCompressArchive, так что это то, что вы должны использовать ... попробуйте что-то вроде

Ext := GetArchiveFormats.FindCompressFormat(an);
if(Ext <> nil)and(Ext.InheritsFrom(TJcl7zCompressArchive))then begin
   Arc := Ext.Create(an);
   TJcl7zCompressArchive(Arc).SetCompressionLevel(9);
   TJcl7zCompressArchive(Arc).SetCompressHeader(True);
   ...
end;
...