Einzelnen Beitrag anzeigen

nytaiceman

Registriert seit: 15. Dez 2005
Ort: Schweiz, Bern
58 Beiträge
 
Delphi XE3 Professional
 
#3

AW: JclSevenZip - Entpacken eines einzelnen Verzeichnisses

  Alt 5. Jul 2012, 23:17
Hallo NickelM,

besten Dank für Deinen Stuppser in die richtige Richtung!

Besonders das hier hat mir geholfen:
Zitat:
Edit2: Ich habe es mal so versucht, jedoch entpacket er mir nicht die Datei, vermutlich weil die Dateinamen einen "\" am Anfang haben.
Wenn man nämlich dem item einen korrekten Filenamen übergibt, dann kann man es auch sauber entpacken ("Kaum macht man's richtig, schon geht's"):
item.FileName := TargetFolder +item.PackedName; Alles in allem sieht das nun so aus:
Delphi-Quellcode:
procedure Extract7ZipFolder(ZipFilePath,TargetFolder:String);
var
   archive: TJclCabDecompressArchive;
   item: TJclCompressionItem;
   s: String;
   i: Integer;
begin
 archive := TJclCabDecompressArchive.Create(ZipFilePath);
// archive.OnProgress := ArchiveProgress;
  try
   if not (archive is TJclSevenZipDecompressArchive) then raise Exception.Create('This format is not handled by 7z.dll');
   archive.ListFiles;
   s := Format('test.zip Item Count: %d'#13#10#13#10, [archive.ItemCount]);

   for i := 0 to archive.ItemCount - 1 do
    begin
     item := archive.Items[i];
     case item.Kind of
      ikFile : s := s + IntToStr(i+1) + ': ' + item.PackedName + #13#10;
      ikDirectory : s := s + IntToStr(i+1) + ': ' + item.FileName + '\'#13#10;
     end;
     item.FileName := TargetFolder +item.PackedName; // = Set a Filename (Fullpath!)
    end;

   if archive.ItemCount > 0 then
    begin
     archive.ExtractAll(TargetFolder);
    end;

  finally
   Archive.Free;
  end;
end;
Einfach ist nur einfach, wenn Einfach auch einfach ist!
Vermeintlich einfache Workarounds führen irgendwann zu Problemen!
  Mit Zitat antworten Zitat