![]() |
Duplicate internal name
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 ![]() 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? |
AW: Duplicate internal name
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. |
AW: Duplicate internal name
Zitat:
Zitat:
Zitat:
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) |
AW: Duplicate internal name
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. |
AW: Duplicate internal name
Hallo,
hast du den Zipmaster als Komponente aus Form gepackt ? Weg aus dem Form und zur Laufzeit erzeugen. Heiko |
AW: Duplicate internal name
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.
|
AW: Duplicate internal name
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; ![]() |
AW: Duplicate internal name
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. :zwinker: Kleiner Tipp: Pfadangaben schon einmal nicht... // EDIT: Da du dafür ne Listbox missbrauchst, müsstest du es ja sogar auf dem Formular sehen... |
AW: Duplicate internal name
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. |
AW: Duplicate internal name
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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