AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Duplicate internal name

Ein Thema von gelberkaktus · begonnen am 5. Mai 2012 · letzter Beitrag vom 7. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2      
gelberkaktus

Registriert seit: 18. Mär 2012
Ort: Kölleda/Thüringen
16 Beiträge
 
Delphi 7 Personal
 
#1

Duplicate internal name

  Alt 5. Mai 2012, 19:55
Hallo,

ich versuche eine Programm zu schreiben, welches Dateien aus einer zip-datei in eine jar-datei packt.

Dazu wird Folgendes erledigt:

1. jar-dateiendung in zip umändern.
2. die umbenannte jar (nun zip) in einen gleichnamigen Ordner entpacken
3. die zip datei in denselben Ordner entpacken
4. alles wieder zippen
5. in jar umbennenen

Dazu verwende ich die Bibliothek zipmaster

Jedoch erscheint jedes mal bei schritt 4 die Meldung "duplicate internal name"

Dies geschieht, wenn ich den Ordner zippen will, als auch wenn ich den Inhalt auslese und einzeln zippe.

Kennt jemand von euch eine Lösung?
"Ohne konkrete Symbole ist der Computer bloß ein Haufen Schrott."
Neil Postman
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Duplicate internal name

  Alt 6. Mai 2012, 02:41
Kann es sein, dass du die Verzeichnisnamen nicht mit speichern lässt und es Dateien gibt, die in Unterverzeichnissen doppelt vorkommen? Ohne Verzeichnisnamen sind diese dann mit dem gleichen Namen doppelt vorhanden, daher der Fehler.`

Oder hast du die alte Zip-Datei noch offen und fügst nun die gerade entpackten Dateien zusätzlich hinzu? Dann gibts natürlich das selbe Problem.

Nebenbei wäre das auch der sinnvollere Weg, denn wozu entpackst du zuerst die Dateien aus dem ursprünglichen Archiv nur um sie dann wieder mit den neuen einzupacken? Nur die Neuen hinzufügen reicht doch.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke ( 6. Mai 2012 um 02:43 Uhr)
  Mit Zitat antworten Zitat
gelberkaktus

Registriert seit: 18. Mär 2012
Ort: Kölleda/Thüringen
16 Beiträge
 
Delphi 7 Personal
 
#3

AW: Duplicate internal name

  Alt 6. Mai 2012, 12:30
Kann es sein, dass du die Verzeichnisnamen nicht mit speichern lässt und es Dateien gibt, die in Unterverzeichnissen doppelt vorkommen? Ohne Verzeichnisnamen sind diese dann mit dem gleichen Namen doppelt vorhanden, daher der Fehler.`
Dazu gibt es extra eine Funktion, die sämtliche Unterverzeichnisse mitsamt Dateien mit packt. Nach der Prüfung mit AllDup habe ich allerdings festgestellt, dass es einige solche Dateien in verschiedenen Ordnern gibt, welche gleich heißen (gleicher Dateityp) und es auch einige Dateien im selben ordner gibt welche gleich heißen, allerdings unterschiedliche Dateitypen sind. (pack.png und pack.txt zum Beispiel)

Oder hast du die alte Zip-Datei noch offen und fügst nun die gerade entpackten Dateien zusätzlich hinzu? Dann gibts natürlich das selbe Problem.
Die wird nun vorher gelöscht das Problem gibt es immernoch.

Nebenbei wäre das auch der sinnvollere Weg, denn wozu entpackst du zuerst die Dateien aus dem ursprünglichen Archiv nur um sie dann wieder mit den neuen einzupacken? Nur die Neuen hinzufügen reicht doch.
Es soll die Möglichkeit geben einige Dateinen zu löschen, deshalb entpacke ich die Zip-Datei zuerst.

Bei diesen Weg, den ich gerade ausprobiert habe, kommt ebenfalls der Error. (jar in zip umbennenen und kopieren, zweite zip entpacken, inhalt des ordners listen, in die andere zip packen ERROR)
"Ohne konkrete Symbole ist der Computer bloß ein Haufen Schrott."
Neil Postman
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Duplicate internal name

  Alt 6. Mai 2012, 13:43
Hast du es denn einmal mit Dateien versucht, die nur eine einzelne Datei mit jeweils unterschiedlichem Namen enthalten?

Wie sieht denn der Quelltext aus? Wenn du ein kleines Beispielprojekt hättest, würde ich es mal ausprobieren.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Duplicate internal name

  Alt 6. Mai 2012, 14:09
Hallo,

hast du den Zipmaster als Komponente aus Form gepackt ?
Weg aus dem Form und zur Laufzeit erzeugen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Duplicate internal name

  Alt 6. Mai 2012, 14:47
Was macht das für einen Unterschied bzw. was hat das mit de Problem zu tun? Bei mir funktionierten bei ZipMaster (wie man es auch erwarten würde) beide Varianten immer problemlos.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
gelberkaktus

Registriert seit: 18. Mär 2012
Ort: Kölleda/Thüringen
16 Beiträge
 
Delphi 7 Personal
 
#7

AW: Duplicate internal name

  Alt 6. Mai 2012, 16:19
der code

zum zippen
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
//integers
i:integer;
//eingelesene variabeln
mcjar, modzip, neunameojar, ordner: string;
//konvertierte variabeln
mczip:string;
//entzippte variablen
mcdic:string;
//umbenannte variabeln
neumczip, neumczip2:string;
//gezippte variablen
neuzip :string;
//rekonvertierte variabeln
neujar:string;
begin
//alle variabeln einlesen
mcjar:= Edit1.Text;
modzip:= Edit2.Text;
neunameojar:= Edit3.Text;
ordner:=ExtractFileDir(mcjar)+'\temp\';
//löscht endung von mc.jar in var
mczip:= Copy(mcjar, 1, Length(mcjar) - 4);
//fügt neue endung hinzu in var
mczip:= mczip +'.zip';
//kopiert mc.jar zu mc.zip nun in fest
if CopyFile(PChar(mcjar), PChar(mczip), False) then
  ShowMessage('schritt1 komplett');
  Progressbar1.Position:= 10;
//entpackt mcjar
mcdic:= Form1.unzip(mczip);
Showmessage('Schritt 2 fertig');
Progressbar1.Position:= 20;
//löscht meta-inf
deldir(mcdic + 'META-INF\');
ShowMessage('Schritt 3 fertig');
Progressbar1.Position:= 30;
//kopiert mod in mc-datei
  with Zipmaster1 do
    begin
      ZipFilename:=modzip;
      ExtrBaseDir:=mcdic;
      Extract;
    end;
ShowMessage('Schritt 4 fertig');
Progressbar1.Position:= 50;
//mc.zip löschen
DeleteFile(mczip);
    //neuenordner finden (extractfiledir findet den übergeordenten ordener heraus)
    //ordner umbenennen
Zipmaster1.Clear;
//daten listen
ListFileDir(mcdic+'\', ListBox1.Items);
Progressbar1.Position:= 60;
//neue zip
  neuzip:= neunameojar + '.zip';
  //neuzip:= ExtractFileDir(mcjar) + '\' + neunameojar + '.zip';
ShowMessage('Schritt 5 fertig');
Progressbar1.Position:= 70;
//wieder zippen
//neuzip:= Form1.zip(neuname, neuzipn);
  with Zipmaster1 do
  begin
    ZipFilename:= '';
    FSpecArgs.Clear;
    ZipFilename:=(neuzip);
    try
    for i:= 0 to (ListBox1.Items.Count -1) do
      FSpecArgs.Add(ListBox1.Items[i]);
    finally
    Add;
    end; //fehler immernoch
  end;
Showmessage('schritt 6 fertig');
Progressbar1.Position:= 100;
end;

//entpacken
function TForm1.unzip(ziparchiv:string):string;
var
ausgabe:string;
begin
  ausgabe:=ziparchiv;
  ausgabe:= Copy(ausgabe, 1, Length(ausgabe) - 4);
  ausgabe:= ausgabe +'\';
  mkdir(ausgabe);
  with Zipmaster1 do
  begin
    ZipFilename:=ziparchiv;
    ExtrBaseDir:=ausgabe;
    Extract;
  end;
  ShowMessage('FERTIG');
  Result:= ausgabe;
end;

//zippen
function TForm1.zip(ordner:string; ausgabe:string):string;
begin
  ordner:= ordner + '\';
  ShowMessage(ordner);
  with Zipmaster1 do
  begin
    ZipFilename:=ausgabe;
    FSpecArgs.Add(ordner);
    Add;
  end;
  ShowMessage('FERTIG');
  Result:= ausgabe;
end;

//verzeichnis löschen
function deldir(dir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom := PChar(dir + #0);
  end;
  Result := (0 = ShFileOperation(fos));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   modzip, ausgabe: string;
begin

modzip:= Edit2.Text;

ausgabe := Form1.unzip(modzip);

end;

procedure TForm1.Button2Click(Sender: TObject);
var ordner, nix:string;
begin
SelectDirectory('Speicherordner wählen', '', ordner);
ShowMessage(ordner);
nix:= Form1.zip(ordner, (ExtractFilePath(ParamStr(0))+'test.zip'));
end;

procedure ListFileDir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
    if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if ((SR.Attr and faDirectory) = faDirectory) then
      begin
        FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
  FileList.Delete(0);
  FileList.Delete(0);
end;
Hier das ganze noch als Download mit den Testdateien, wessen Pfadim Programm angepasst werden muss.
"Ohne konkrete Symbole ist der Computer bloß ein Haufen Schrott."
Neil Postman

Geändert von gelberkaktus ( 6. Mai 2012 um 16:26 Uhr) Grund: Download hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Duplicate internal name

  Alt 6. Mai 2012, 16:51
Ach du Schreck, was für eine Codeformatierung... Aber den Fehler hättest du im Debugger eigentlich schnell finden können, da brauch ich gar nicht testen...

Schau dir mal an was ListFileDir in die Liste packt.
Kleiner Tipp:
Pfadangaben schon einmal nicht...

// EDIT:
Da du dafür ne Listbox missbrauchst, müsstest du es ja sogar auf dem Formular sehen...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
gelberkaktus

Registriert seit: 18. Mär 2012
Ort: Kölleda/Thüringen
16 Beiträge
 
Delphi 7 Personal
 
#9

AW: Duplicate internal name

  Alt 6. Mai 2012, 17:35
die vollständigen pfadangaben hab ich da vergessen. Eingefügt und getestet. Fehler kommt ebenfalls.
die Dateien entsprechend frisiert. Fehler, frisiere grade weiter, welches aber gar nicht hilft, da ich es in das hauptprogramm nicht einfügen kann, weil es mir so nichts nützt.
"Ohne konkrete Symbole ist der Computer bloß ein Haufen Schrott."
Neil Postman
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#10

AW: Duplicate internal name

  Alt 6. Mai 2012, 18:11
Zitat:
Ach du Schreck, was für eine Codeformatierung...
grundsätzlich hat er Recht... aber auch der Delphicode wird manchmal nach dem Einfügen verhunzt. Wenn man da nicht nacharbeitet sieht es öfter gruselig aus...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:11 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