環境
- RadStudio XE8
- TurboPower Abbrevia 5.2
暗号化されているか確認
TAbUnZipper.Itemsの返すTAbZipItemのIsEncrypted プロパティを調べる。
function CheckEncryption(const AFileName: string): Boolean;
var
Zip: TAbUnZipper;
begin
Zip := TAbUnZipper.Create(Nil);
Zip.FileName := AFileName;
Zip.TempDirectory := TPath.GetTempPath;
Zip.ExtractOptions := [eoCreateDirs, eoRestorePath];
Result := False;
if Zip.Count > 0 then
begin
if Zip.Items[0].IsEncrypted then
Result := True;
end;
Zip.Free;
end;
パスワードが正しいかチェック
TAbUnZipper.Passwordにパスワードを設定してTAbUnZipper.TestTaggedItemsを実行する。
パスワードが正しく無かった場合は例外としてEAbZipInvalidPasswordが投げられるのでそれで確認する。
function CheckPassword(const AFileName, APassword: string): Boolean;
var
Zip: TAbUnZipper;
OutPutPath: String;
begin
Zip := TAbUnZipper.Create(Nil);
Zip.FileName := AFileName;
Zip.TempDirectory := TPath.GetTempPath;
Zip.ExtractOptions := [eoCreateDirs, eoRestorePath];
Zip.Password := APassword;
Zip.TagItems('*.*');
try
Zip.TestTaggedItems;
Result := True;
except
on EAbZipInvalidPassword do
begin
Result := False;
end;
end;
Zip.Free;
end;
ライブラリにおまかせ
OnNeedPassword イベントでパスワードを設定する。
procedure TForm1.OnNeedPassword(Sender: TObject; var NewPassword: AnsiString);
var
Val: String;
begin
if InputQuery('パスワード入力', 'パスワードを入力してください', Val) then
NewPassword := Val;
end;
procedure TForm1.ExctractFile(const AFileName: string);
var
Zip: TAbUnZipper;
OutPutPath: String;
Pass: String;
begin
Zip := TAbUnZipper.Create(Nil);
Zip.FileName := AFileName;
Zip.TempDirectory := TPath.GetTempPath;
Zip.ExtractOptions := [eoCreateDirs, eoRestorePath];
Zip.BaseDirectory := 'C:\';
Zip.OnNeedPassword := OnNeedPassword;
Zip.ExtractFiles('*.*');
FreeAndNil(Zip);
end;