AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [Abbrevia] Es wird immer wieder neues Archive erstellt
Thema durchsuchen
Ansicht
Themen-Optionen

[Abbrevia] Es wird immer wieder neues Archive erstellt

Ein Thema von -Phantom- · begonnen am 23. Mai 2010 · letzter Beitrag vom 24. Mai 2010
Antwort Antwort
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#1

[Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 23. Mai 2010, 22:55
Hey Leute,

Ich versuche grade ein .cab Archive zu erstellen und das so:
Delphi-Quellcode:
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;
//Der Aufruf
Delphi-Quellcode:
procedure TForm4.sButton2Click(Sender: TObject);
{...}
cab(neupfad+'.cab');
{...}
end;
Das Archive wird auch erstellt soweit so gut.

Nun will ich mehr Dateien einfügen und das so:
Delphi-Quellcode:
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;
Aber im Archive ist immer nur 1 Datei, ich kann so viele einfügen wie ich will immer nur eine
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
Mathias Jansen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 23. Mai 2010, 23:05
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:
AbMakeCab1.OpenArchive(cabs);
for i := 0 to OpenDialog2.Files.Count - 1 do
begin
  AbMakeCab1.AddFiles(OpenDialog2.Files[i], 0);
end;
AbMakeCab1.CloseArchive;
Aber das ist nur eine Vermutung.

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:
// 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;
Mein Code von oben müsste auch funktionieren.
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 23. Mai 2010, 23:52
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:
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;
Gruß Mathias

// Hätte eher nachfragen müssen, hab nun 2 1/2 an dem Problem gesessen. ^^
Mathias Jansen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 24. Mai 2010, 00:05
Aber ich bin auch der Meinung, dass das CloseArchive aus der Schleife raus muss.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 24. Mai 2010, 02:18
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:
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;
Also immer wenn man auf den Button drück wird ein neues Archive erstellt, was ja nicht soll
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:
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;
// Mit .zip Endung klappt alles Prima.
Mathias Jansen
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#6

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 24. Mai 2010, 08:00
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 24. Mai 2010, 08:16
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.
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: [Abbrevia] Es wird immer wieder neues Archive erstellt

  Alt 24. Mai 2010, 10:48
Ich kann das ja auch weg lassen bring aber nicht viel. Dann lass ich .cab wohl aus dem Programm raus...
Mathias Jansen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz