![]() |
[Abbrevia] Es wird immer wieder neues Archive erstellt
Hey Leute,
Ich versuche grade ein .cab Archive zu erstellen und das so:
Delphi-Quellcode:
//Der Aufruf
procedure Tform4.cab(CabS : String);
var datei : String; begin form2.AbMakeCab1.FileName := Cabs; form2.AbMakeCab1.OpenArchive(cabs); datei := Extractfilename(neupfad); form2.AbMakeCab1.AddFiles(datei,0); form2.AbMakeCab1.CloseArchive;
Delphi-Quellcode:
Das Archive wird auch erstellt soweit so gut.
procedure TForm4.sButton2Click(Sender: TObject);
{...} cab(neupfad+'.cab'); {...} end; Nun will ich mehr Dateien einfügen und das so:
Delphi-Quellcode:
Aber im Archive ist immer nur 1 Datei, ich kann so viele einfügen wie ich will immer nur eine :wall:
opendialog2.Execute;
i2 := opendialog2.Files.Count; for i := 0 to i2-1 do begin neudatei := Extractfilename(opendialog2.Files[i]); item := slistview2.Items.Add; item.Caption := neudatei; item.SubItems.Add(Extractfilename(neupfad)+'\'+neudatei); abmakecab1.FileName := neupfad+'.cab'; abmakecab1.AddFiles(Extractfilename(opendialog2.Files[i]),0); abmakecab1.CloseArchive; Ich glaube, das sich das Archive immer wieder neu erstellt. Wisst ihr was das Problem ist? PS: Bei den Beispielen von Abbrevia habe ich nichts brauchbares gefunden ---------------------------------------------------------------------- Gruß Mathias |
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Hallo Mathias,
ich kenne Abbrevia nicht, aber für mich erscheint das Ganze nur dann logisch, wenn "AddFiles" in der Schleife aufgerufen wird. "CloseArchive" schreibt vermutlich das Archiv auf die Festplatte (wie bei CloseFile) und damit überschreibst du das Archiv ständig. Versuche also, nur "AddFiles" in deiner For-Schleife aufzurufen
Delphi-Quellcode:
Aber das ist nur eine Vermutung.
AbMakeCab1.OpenArchive(cabs);
for i := 0 to OpenDialog2.Files.Count - 1 do begin AbMakeCab1.AddFiles(OpenDialog2.Files[i], 0); end; AbMakeCab1.CloseArchive; Ich denke auch, dass du der Methode "AddFiles" einen absoluten Dateipfad übergeben solltest. Relative Pfade sind immer kritisch, da du nie weißt, auf welches Verzeichnis sie sich beziehen (siehe meinen Beispielcode). Grüße Matthias Nachtrag: Ich liege übrigens richtig, wie die Beispiele von Abbrevia zeigen:
Delphi-Quellcode:
Mein Code von oben müsste auch funktionieren.
// Quelle: /examples/MakeCab1.pas
if OpenDialog1.Execute then if (OpenDialog1.Files.Count > 0) then begin // ... FileList := TStringList.Create; try FileList.Assign(OpenDialog1.Files); for i := 0 to Pred(FileList.Count) do AbMakeCab1.AddFiles(FileList.Strings[i], 0); finally FileList.Free; end; // ... end; |
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Danke dir Matthias
Es lag aber nicht an dem abmakecab.close sondern abmakecab.filename := ... So nun meine Lösung: Das mit dem Cabs{..} ganz weg lassen Man erstellt nun die Datei beim einfügen der ersten Datei :
Delphi-Quellcode:
Gruß Mathias
opendialog2.Execute;
abmakecab1.FileName := neupfad+'.cab'; // das darf nicht mit in die Schleife i2 := opendialog2.Files.Count; for i := 0 to i2-1 do begin neudatei := Extractfilename(opendialog2.Files[i]); item := slistview2.Items.Add; item.Caption := neudatei; item.SubItems.Add(Extractfilename(neupfad)+'\'+neudatei); abmakecab1.AddFiles(Extractfilename(opendialog2.Files[i]),0); abmakecab1.CloseArchive; end; // Hätte eher nachfragen müssen, hab nun 2 1/2 an dem Problem gesessen. ^^ |
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Aber ich bin auch der Meinung, dass das CloseArchive aus der Schleife raus muss.
|
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Ja ich hab es nun auch gemacht aber das Problem ist doch noch nicht ganz weg.
Nun werden zwar mehrere Dateien in das Archive gepackt aber immer wenn man auf den Button drauf drückt wird das wieder überschrieben
Delphi-Quellcode:
Also immer wenn man auf den Button drück wird ein neues Archive erstellt, was ja nicht soll
procedure TForm2.sBitBtn8Click(Sender: TObject);
{...} if (label1.Caption = 'Neu') and (neuendung = '.cab') then begin opendialog2.Execute; abmakecab1.FileName := neupfad+neuendung; bzw.{abmakecab1.openarchive(neupfad+'.cab');} // Hier wird das immer überschrieben i2 := opendialog2.Files.Count; for i := 0 to i2-1 do begin neudatei := Extractfilename(opendialog2.Files[i]); item := slistview2.Items.Add; item.Caption := neudatei; item.SubItems.Add(Extractfilename(neupfad)+'\'+neudatei); //item.SubItems.Add(inttostr(abmakecab1.Items[i].CompressedSize)+' B'); abmakecab1.AddFiles(Extractfilename(opendialog2.Files[i]),0); end; abmakecab1.CloseArchive; end; wie verhindere ich das? Wenn ich Abmakecab1.filename außerhalb der If-Abfrage habe kommt die Meldung "Archive Filename ist Blank", nun was ich auch komisch finde ist, dass das geht :
Delphi-Quellcode:
// Mit .zip Endung klappt alles Prima.
if (label1.Caption = 'Neu') and (neuendung = '.zip') then begin
opendialog2.Execute; abzipper1.OpenArchive(neupfad+neuendung); i2 := opendialog2.Files.Count; for i := 0 to i2-1 do begin neudatei := Extractfilename(opendialog2.Files[i]); item := slistview2.Items.Add; item.Caption := neudatei; item.SubItems.Add(Extractfilename(neupfad)+'\'+neudatei); //item.SubItems.Add(inttostr(abzipper1.Items[i].CompressedSize)+ ' B'); abzipper1.AddFiles(Extractfilename(opendialog2.Files[i]),0); end; abzipper1.CloseArchive; end; |
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Das ganze ist nur solange komisch bis man die Doku gelesen hat, da steht klar drin das die Möglichkeiten bei Cabinetdateien eingeschränkt sind. (..no eqivalent to delete, freshen, and replace operations with zip files..)
Grüsse, Dirk |
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Und weshalb nutzt du überall "ExtractFileName"?
Ich schrieb doch oben, dass relative Pfade Mist sind. Lass diesen Funktionsaufruf einfach weg, sonst bereitet er dir irgendwann noch Probleme. |
Re: [Abbrevia] Es wird immer wieder neues Archive erstellt
Ich kann das ja auch weg lassen bring aber nicht viel. Dann lass ich .cab wohl aus dem Programm raus...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 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