Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei in Zip Archiv (https://www.delphipraxis.net/156861-datei-zip-archiv.html)

-Phantom- 17. Dez 2010 15:10

Datei in Zip Archiv
 
Hey Leute,

wie ihr vielleicht schon mitbekommen habt ich bin grade an einem Zip programm, läuft auch so weit gut. Im Programm kann man einstellen ob man den Verzeichnisnamen mit speichern will oder nicht. Nur wirds komisch ^^. Wenn man nun sagt verzeichnisnamen nicht mit Speichern und eine Datei hinzfügen will, die aber im selben Pfad ( unterordner usw ) auch vorhanden ist, bircht das Programm mit der Fehlermeldung "Duplicate Internal Name" ab. Wenn man aber sagt Verzeichnisnamen mit speichern klappt alles wunderbar und auch wenn die Datei im in selbern Pfad nicht vorhanden ist.

Hier mein Quelltext:
Delphi-Quellcode:
 begin
    i2 := add.Files.Count;
    for i := 0 to i2 - 1 do
    begin
      neudatei := Extractfilename(add.Files[i]);
      Item := Dateilist.Items.add;
      Item.Caption := neudatei;
      if feinstellungen.checkbox1.Checked then  begin // Das hat nichts mit Hinzufügen der Datei zutun, nur das der Pfad richtig angezeigt wird
      posi := pos('\',add.Files[i]);
      teilstring := copy(add.Files[i],posi+1);
       Item.SubItems.add(Extractfilename(lblpfad.Caption) + '/' + teilstring);
      end ELSE
       Item.SubItems.add(Extractfilename(lblpfad.Caption) + '/' + neudatei);
      try
       fneu.zip.FSpecArgs.add(add.Files[i]);
        fneu.zip.add; // Mit f5 und f8 habe ich herrausgefunden, das hier das Problem liegt, aber welches?
       fneu.zip.ZipComment := fneu.smemo1.Text;
      except
        fehlerhin := True;
      end;
    end;
    for iz := 0 to Dateilist.Items.Count - 1 do
    begin
      Item2 := Dateilist.Items[iz];
      Item2.SubItems.add(inttostr(fneu.zip[iz].CompressedSize) + ' B');
      Item2.SubItems.add(datetostr(fneu.zip[iz].DateStamp));
    end;
    lblstatus.Caption := 'Dateien wurden hinzugefügt';
    if (dialogshow) and not(fehlerhin) then
      showmessage('Datei/en wurden erfolgreich hinzugefügt');
    Dateilist.Enabled := True;
    lblanzahl.Caption := inttostr(fneu.zip.Count);
    lblag.Caption := inttostr(fneu.zip.ZipFileSize div 1024) + ' KB';
    if fehlerhin then
      lblstatus.Caption := 'Fehler beim hinzufügen';
  end
  ELSE
    lblstatus.Caption := '-----';
Ich hoffe einer von euch hat die passende Antwort

PS: Ich benutze zum Hinzufügen der Dateien die Komponente : ZipMaster19

Gruß

Mathias Jansen

DeddyH 17. Dez 2010 15:15

AW: Datei in Zip Archiv
 
Ich kenne die Komponente jetzt nicht, aber wahrscheinlich muss die Kombination aus Pfad und Dateiname innerhalb des Archivs eindeutig sein. Speichert man nun den Pfad nicht mit, ist die Eindeutigkeit bei gleichem Dateinamen nicht mehr gegeben, auch wenn das Quellverzeichnis ein ganz anderes ist.

-Phantom- 17. Dez 2010 15:21

AW: Datei in Zip Archiv
 
Nun ist das Problem, dass mit dem Pfad speichern die Komponete macht
Delphi-Quellcode:
with fneu.zip do begin
if checkbox1.Checked = True then
    begin
      AddOptions := AddOptions + [AddDirNames];
      ini.WriteBool('KOMPRESSION', 'AddDirNames', True);
if checkbox1.Checked = false then
    begin
      AddOptions := AddOptions - [AddDirNames];
      ini.WriteBool('KOMPRESSION', 'AddDirNames', false);
Ich selber mache ja nichts mit dem Archiv-Pfad. Ich ändere nur den Pfad den er in die Listview eingetragen werden soll...

DeddyH 17. Dez 2010 15:29

AW: Datei in Zip Archiv
 
Was ist denn fneu? Und was hat das jetzt mit einer ListView zu tun? Ich verstehe Deinen Gedankengang nicht, sry.

-Phantom- 17. Dez 2010 15:34

AW: Datei in Zip Archiv
 
Fneu ist das Formular, auf dem sich die ZipMaster befindet.

Was das mit der Listview zutun hat ist ganz einfach :

Wenn ich neue Dateien hinzufüge sollen die in der Listview eingetragen werden...

und das mache ich hier
Delphi-Quellcode:
if feinstellungen.checkbox1.Checked then  begin
      posi := pos('\',add.Files[i]);
      teilstring := copy(add.Files[i],posi+1);
       Item.SubItems.add(Extractfilename(lblpfad.Caption) + '/' + teilstring);
      end ELSE
       Item.SubItems.add(Extractfilename(lblpfad.Caption) + '/' + neudatei);
Ich wollte damit nur sicher stellen das niemand meint das ich damit den Pfad im Archiv ändere oder ähnliches.

DeddyH 17. Dez 2010 15:41

AW: Datei in Zip Archiv
 
Aber der Fehler tritt doch ganz woanders auf. Nochmal: es kann in einem Archiv keine 2 Dateien gleichen Namens mit gleicher Pfadangabe geben. Du kannst in einem Verzeichnis ja auch keine 2 Dateien mit gleichem Namen anlegen. Das hat doch mit einer ListView herzlich wenig zu tun.

-Phantom- 17. Dez 2010 15:50

AW: Datei in Zip Archiv
 
Ja mit Listview ist mir klar :
Das problem:
c:\tet.txt geht nicht weil es in c:\hallo\tet.txt die gleiche datei gibt

// Die Datei brauch ja noch nicht mal im Archiv sein .. Das Archiv kann leer sein und wenn ich denn versuche die tet.txt einzufügen wenn es im unterordner auch eine tet.txt gibt kommt der Error. wenn ich aber versuche die c:\hallo\tet.txt einzufügen geht es..

Es ist etwas komplex

DeddyH 17. Dez 2010 15:52

AW: Datei in Zip Archiv
 
Das sag ich doch die ganze Zeit.

-Phantom- 17. Dez 2010 15:59

AW: Datei in Zip Archiv
 
Ja und wie behebe ich es?

DeddyH 17. Dez 2010 16:01

AW: Datei in Zip Archiv
 
Was willst Du beheben? Dieses Verhalten ist "by design", die Erklärung dafür habe ich doch bereits gegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.
Seite 1 von 2  1 2      

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