![]() |
KAZip Open Archiv
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich versuche mich gerade am packen von Dateien. Ich nutze hierfür KAZip unter BDS 2006. Der Compiler bringt keinen Fehler, aber zur Laufzeit bekomme ich eine Zugriffsverletzung an der folgenden Stelle
Delphi-Quellcode:
Der Code liegt in KAZip.
procedure TKAZip.Close;
begin Entries.Clear; // <- Hier wird der Zugriffsfehler erzeugt if Assigned(FZipStream) AND (NOT FExternalStream) Then FZipStream.Free; FExternalStream := False; FZipStream := Nil; FIsZipFile := False; FIsDirty := True; FReadOnly := False; DoChange(Self,0); end; Und "Entries" ist auch unter Properties deklariert. Mein Projekt liegt im Anhang. Vielleicht hat ja jemand eine Idee oder noch besser eine Erklärung für mich. :gruebel: Gruß Holger. |
Re: KAZip Open Archiv
Moin Holger,
hättest du eventuell ein Link zu der Homepage der Komponente ? |
Re: KAZip Open Archiv
|
Re: KAZip Open Archiv
Hallo,
ich habe das Projekt gerade noch mal in Turbo Delphi getestet. Aber das Ergebnis ist das gleiche. Habe schon im Forum nach einem Beispielprojekt gesucht, aber nichts verwertbares gefunden. :cry: [edit]Schreibfehler[/edit] |
Re: KAZip Open Archiv
Also mir fehlt da irgendwo ein myZipArchive.Create, für mich siehts so aus als wenn du auf ein nicht erzeugtes Objekt zugreifst. Du musst das Objekt myZipArchive also noch irgendwo erzeugen (im OnCreate vielleicht).
|
Re: KAZip Open Archiv
Hallo,
ich habe im OnCreate folgendes eingetragen
Delphi-Quellcode:
Und sobald das Programm zur Laufzeit da ankommt
procedure Tfrm_main.FormCreate(Sender: TObject);
begin myZipArchive.Create(self); end; bekomme ich wieder eine Exeption mit Zugriffsverletzung. Ich hatte mir das mir den nicht erzeugten Objekten auch schon gedacht, aber das erzeugen des ZIPs klappt deswaegen habe ich die Idee verworfen.
Delphi-Quellcode:
Ich hab keine richtige Idee mehr.
procedure Tfrm_main.Neuanlegen1Click(Sender: TObject);
var FS : TFileStream; begin // Archiv neu anlegen if SaveDialog1.Execute Then Begin FS := TFileStream.Create(SaveDialog1.FileName,fmOpenReadWrite or FmCreate); Try myZipArchive.CreateZip(FS); // <- Hier wird das ZIP erzeugt (kein Fehler) Finally FS.Free; End; myZipArchive.Open(SaveDialog1.FileName); Statusbar1.simpletext := ' Aktuelles Archiv: ' + SaveDialog1.FileName; End; end; Auf den Seiten von Torry, wo ich die Komponente heruntergeladen habe, ist sie auch nur bis D2005 angegeben. Vielleicht klappt sie einfach nicht mit D2006. :gruebel: |
Re: KAZip Open Archiv
Du weist schon was du mit "self" übergibst, oder ?
|
Re: KAZip Open Archiv
Den Bezug auf meine eigene Anwendung.
Dachte ich wenigsten. Tue ich das nicht? |
Re: KAZip Open Archiv
Doch, aber wie es in deinem 2. Code zeigt, möchte er einen Filestream als Parameter haben.
|
Re: KAZip Open Archiv
ohne jetzt in den code geschaut zu haben:
Delphi-Quellcode:
kommt mir etwas spanisch vor.. wäre das nicht eigentlich:
procedure Tfrm_main.FormCreate(Sender: TObject);
begin myZipArchive.Create(self); end;
Delphi-Quellcode:
gruß
procedure Tfrm_main.FormCreate(Sender: TObject);
begin myZipArchive := TZipAchrive.Create(self); // oder wie auch immer die klasse heißt ? end; reli |
Re: KAZip Open Archiv
Probiers mal so:
Delphi-Quellcode:
Um Dateien und Ordner hinzuzufügen eignet sich imho die Methode AddFilesAndFolders am besten. Also alle Dateien (kompletter Pfad) in eine StringList und folgendes:
procedure Tfrm_main.Neuanlegen1Click(Sender: TObject);
begin // Archiv neu anlegen if SaveDialog1.Execute then begin myZipArchive.CreateZip(SaveDialog1.FileName); Zip.FileName := SaveDialog1.FileName; // < ob das unbedingt nötig ist weis ich nicht Zip.Active := true; // das ist aber nötig ! Statusbar1.simpletext := ' Aktuelles Archiv: ' + SaveDialog1.FileName; end; end;
Delphi-Quellcode:
sl := TStringList.Create; // mal angenommen die TStringList-Variable heisst sl
Pfad := 'C:\Blub\'; // ne Variable wo der Hauptpfad der Archivdateien drin steht try <StringList füllen> myZipArchive.AddFilesAndFolders(sl,Pfad,true); // die Dateiliste und der Pfad werden übergeben, der dritte Parameter (true) bedeutet das auch Unterordner durchsucht und dem Archiv hinzugefügt werden (wenn in der StringList (sl) Ordner drin sind) finally myZipArchive.Active := false; myZipArchive.Close; sl.Free; end; |
Re: KAZip Open Archiv
Ou, hab mich verlesen CreateZip und Create sind einfach zu gleich :oops:
Im Oncrate muss es natürlich myZipArchive := TZipAchrive.Create(self); heisen, wie von Relicted schon geschrieben. |
Re: KAZip Open Archiv
Moin little_buddah,
ich hab's mal so gelöst .... Hab es aber gerade aus einem Projekt herausgelöst... nicht getestet. ... Es gibt ein Verzeichnis indem die Dateien liegen, die archiviert werden sollen. Es wird in das Verzeichnis gewechselt ... Das ZipFilename sieht so aus: <übergebenerName>_<Datum>.zip
Delphi-Quellcode:
cu && HTH
//==============================================================================
// Dateien packen procedure TForm1.packer(IniAList:TStrings; name, ldate, base: string); var str2, str3, str4: string; // str2: Zipdateiname, str3: e:\projekt\ZipOutput, str4: e:\projekt\sammel\, i, fcount : integer; // Filecount Alist: TStringlist; // Dateiliste zum packen SKBase, SKsrPath, SKzipPath : string; begin SKBase : string = 'e:\projekt'; SKsrPath : string = 'sammel\'; SKzipPath : string = 'ZIPoutput\'; KAZip1:=TKAZip.Create(nil); AList:=TStringlist.Create; AList.Assign(IniAList); str2:=name+'_'+ldate; // ZipArchiv str3:=base+'\'+SKsrPath; // dateien die eingepackt werden sollen str4:=base+'\'+SKzipPath; // Verzeichnis, wo das ZIP Archiv abgelegt werden soll if DirectoryExists(str3) then begin KAZip1.CreateZip(str4+str2+'.zip'); KAZip1.FileName:=str4+str2+'.zip'; KAZip1.Active:=true; Form1.ProgressBar1.Min:=0; Form1.Show; Form1.ProgressBar1.Max:=AList.Count; fcount:=0; for i := 0 to AList.Count -1 do begin // und ab zu den Logdateien chdir(str3); if FileExists(Alist[i]) then begin KAZip1.AddFile(Alist[i]); if fcount = 50 then begin Application.ProcessMessages; fcount:=0; end; fcount:=fcount + 1; end; // und wieder zurück chdir(ExtractFilePath(ParamStr(0))); Form1.Label1.Refresh; Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position + 1; end; KAZip1.Active:=false; KAZip1.Close; KAZip1.Free; Form1.ProgressBar1.Position:=0; AList.Free; end else begin MessageDlg('Verzeichnis existiert nicht',mtInformation, [mbOk], 0); end; end; ascotlx |
Re: KAZip Open Archiv
Super.
Das
Delphi-Quellcode:
im OnCreate löst meine Sorgen.
myZipArchive := TKAZip.Create(self);
Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz