![]() |
Zip Kompression / Store wählen?
Hallo
Ich wollte fragen ob es eine einfache Möglichkeit gibt mit der "system.zip" die KompressionsOption wählen zu können? Am Schluss brauche ich eine Zip Datei die nur "gespeichert" ist und nicht komprimiert (Store)
Delphi-Quellcode:
function zipFile(ArchiveName, Filename: String): boolean;
var Zip:TZipFile; begin Zip:=TZipFile.Create; try if FileExists(ArchiveName) then DeleteFile(ArchiveName); zip.Open(ArchiveName,zmWrite); zip.Add(Filename); zip.Close; Result:=true; except REsult:=false; end; FreeAndNil(zip); end; |
AW: Zip Kompression / Store wählen?
Vieleicht so?
Delphi-Quellcode:
zip.Add(FileName, '', zcStored);
|
AW: Zip Kompression / Store wählen?
:o
Vielen Dank. :thumb: |
AW: Zip Kompression / Store wählen?
Ich war wohl etwas zu schnell mit meiner Antwort.
Ich zippe nun einen Ordner wie folgt. Aber leider reklamiert das Programm, dass dann anschliessend das .zip File weiterverarbeitet, immer noch das dieses Archiv nicht im Store Modus gespeichert wurde. Wenn ich den Ordner mit WinRAR packe dann gehts. Weiss jemand was ich falsch mache?
Delphi-Quellcode:
rufe es dann so auf:
procedure DoZip(SourceDir: string; ZipFile: TZipFile);
var FileName: String; procedure ZipFiles(RealDir, ZipDir: string); var E: Integer; sr: TSearchRec; begin ZipDir := StringReplace(RealDir, ZipDir, '', []); E := FindFirst(RealDir + '*.*', (faAnyFile and not faDirectory), sr); while E = 0 do begin if (sr.Attr and faDirectory) = 0 then begin FileName := sr.Name; if RealDir + FileName <> ParamStr(0) then ZipFile.Add(RealDir + FileName, ZipDir + FileName, zcStored); end; E := FindNext(sr); end; FindClose(sr); end; procedure ZipPath(RealDir, ZipDir: string ); var E: Integer; sr: TSearchRec; F: Boolean; begin RealDir := RealDir + '\'; if ZipDir = '' then begin ZipDir := RealDir; E := Length(ZipDir); F := True; while (E > 0) and ((Copy(ZipDir, E, 1) <> '\')) or (F) do begin Delete(ZipDir, E, 1); Dec(E); F := False; end; end; E := FindFirst(RealDir + '*.*', faDirectory, sr); while E = 0 do begin if (sr.Attr and faDirectory) = faDirectory then begin FileName := sr.Name; if (FileName <> '.') and (FileName <> '..') then begin ZipPath(RealDir + FileName, ZipDir); end; end; E := FindNext(sr); end; FindClose(sr); ZipFiles(RealDir, ZipDir); end; begin ZipPath(SourceDir, ''); end;
Delphi-Quellcode:
ZipFile := TZipFile.Create;
ZipFile.Open(outpath2, zmWrite); DoZip(ExtractFilePath(Application.Exename)+'temp\res', ZipFile); ZipFile.Close; FreeAndNil(ZipFile); |
AW: Zip Kompression / Store wählen?
Ich habe zwar keine Hilfe, aber vielleicht Hilfe zur Selbsthilfe. Die Fehlermeldung, dass "irgendwas" am Format für den Store nicht stimmt ist ja wenig auskunftsreich. Du könntest mal eine einzelne (am Besten vermutlich kleine [da einfacher im Editor zu betrachten]{Lorem Ipsum?}) Textdatei auf beide Weisen verarbeiten (also einmal WinRAR und einmal dein Programm).
Dann kannst du vielleicht zuerst mal die Größen der Beiden vergleichen. Zudem ist ein Hexeditor eventuell ganz hilfreich um die Unterschiede zu sehen. Da die Files ja gar nicht komprimiert sein sollen, kann man da einfach die Datei wieder erkennen. Hoffe, dass dich das weiter bringt... :) Brighty |
AW: Zip Kompression / Store wählen?
Danke das mach ich gleich mal
|
AW: Zip Kompression / Store wählen?
Liste der Anhänge anzeigen (Anzahl: 4)
Nun Ja, Also folgendes habe ich mal herausgefunden.
Die gezipten Dateien die sich in den beiden Archiven befinden haben die selbe Grösse, selbe PackGrösse und auch die selbe CRC "Prüfungs Nummer". Die beiden zip Dateien sind jedoch nicht genau gleich gross. Und wenn ich diese mit Hex/Text Editor aufmache ist zumindest der Anfang wie auch das Ende der Dateien nicht genau gleich. Ist das der Header der Zip Datei? Also vermute ich mal, dass das packen der Dateien Grundsätzlich korrekt im Store Modus durchgeführt wird. Aber beim erstellen der zip Datei wird irgendein Unterschied gemacht? |
AW: Zip Kompression / Store wählen?
Zitat:
|
AW: Zip Kompression / Store wählen?
Liste der Anhänge anzeigen (Anzahl: 1)
Im Internet finde ich auf diversen Seiten nur den Input das man keine Kompression verwenden darf (also Store verwenden).
Das Programm/Spiel spuckt diese Fehlermeldung beim laden der zip Datei aus: (Bild) Wenn ich in der Log Datei des Spiel schaue steht da leider auch nur:
Code:
e
NOT loaded: unsupported compression typ
|
AW: Zip Kompression / Store wählen?
Kontaktiere doch mal den Urheber dieses Codes vielleicht weiß der mehr :stupid:
=> ![]() |
AW: Zip Kompression / Store wählen?
Also leider finde ich es nicht heraus.
Habe es jetzt auch noch mit zipforge versucht und habe da auch diverse einstellungen getestet. Aber auch so kommt immer die besagte fehlermeldung betreffend "compression store". Mit Winrar gehts wenn ich in den optionen auf "speichern" umstelle. Irgendwas macht Winrar einfach anders :? |
AW: Zip Kompression / Store wählen?
Gibst du den Stream ordnungsgemäß wieder frei? Nicht dass du alles in den Stream packst und ihn dann nicht ordnungsgemäß wieder frei gibst und so eine kaputte Datei auf der Festplatte landet.
|
AW: Zip Kompression / Store wählen?
Ich glaube es müsste so gut sein?
Delphi-Quellcode:
procedure DoZip(SourceDir: string; ZipFile: TZipFile; DestDir: string);
var FileName: String; function FileInUse(FileName: string): Boolean; var hFileRes: hFILE; begin Result := False; if not FileExists(FileName) then exit; hFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (hFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(hFileRes); end; procedure ZipFiles(RealDir, ZipDir: string); var E: Integer; sr: TSearchRec; begin ZipDir := StringReplace(RealDir, ZipDir, '', []); E := FindFirst(RealDir + '*.*', (faAnyFile and not faDirectory), sr); while E = 0 do begin if (sr.Attr and faDirectory) = 0 then begin FileName := sr.Name; if FileInUse(RealDir + FileName) then begin CopyFile(PWideChar(RealDir + FileName), PWideChar(DestDir + FileName), False); ZipFile.Add(DestDir + FileName, ZipDir + FileName, zcStored); DeleteFile(PWideChar(DestDir + FileName)); end else ZipFile.Add(RealDir + FileName, ZipDir + FileName, zcstored); end; E := FindNext(sr); end; FindClose(sr); end; procedure ZipPath(RealDir, ZipDir: string); var E: Integer; sr: TSearchRec; F: Boolean; begin RealDir := RealDir + '\'; if ZipDir = '' then begin ZipDir := RealDir; E := Length(ZipDir); F := True; while (E > 0) and ((Copy(ZipDir, E, 1) <> '\')) or (F) do begin Delete(ZipDir, E, 1); Dec(E); F := False; end; end; E := FindFirst(RealDir + '*.*', faDirectory, sr); while E = 0 do begin if (sr.Attr and faDirectory) = faDirectory then begin FileName := sr.Name; if (FileName <> '.') and (FileName <> '..') then begin ZipPath(RealDir + FileName, ZipDir); end; end; E := FindNext(sr); end; FindClose(sr); ZipFiles(RealDir, ZipDir); end; begin ZipPath(SourceDir, ''); end;
Delphi-Quellcode:
ZipFile := TZipFile.Create; ZipFile.Open(outpath2+'\'+edit3.Text+'.wotmod', zmWrite); DoZip(geepfad+'\temp\res' ,ZipFile, outpath2+'\'+edit3.Text+'.wotmod'); ZipFile.Close; FreeAndNil(ZipFile); |
AW: Zip Kompression / Store wählen?
Wenn man sich mal die beiden oben angehängten Textdateien genauer anschaut, so erkennt man, dass MEINEv.txt eine Teilmenge von WINRARv.txt ist. MEINEv.txt ist in WINRARv.txt ungefähr am Position F8 zu finden.
WinRar scheint davor die Verzeichnisstruktur abzulegen, was bei Deiner Variante fehlt. Eigentlich hat das ZIP-Format die Möglichkeit, leere Verzeichnisse mit abzulegen. Meine Vermutung: Die fehlen hier. Also bitte mal bei WinRar nachschauen, wie da das Zippen genau konfiguriert ist und dieses dann in Deiner Variante vollständig abbilden. |
AW: Zip Kompression / Store wählen?
Interessant ist auch, daß sich das WinRAR-File nicht mit TZipFile lesen lässt. Übrigens auch nicht mit 7-Zip oder den Windows-Bordmitteln.
|
AW: Zip Kompression / Store wählen?
Oh, stimmt. Windowscommander kann das auch nicht (nur in der HEX-Ansicht). Öffnen scheitert.
Also wird hier ein ZIP-Format benötigt, das eigentlich kein ZIP-Format ist, aber gewisse Ähnlichkeiten hat. Nutzt die Software, die hier bedient werden soll, eventuell eine der DLLs, die zu WinRAR gehört und erstellt bzw. liest damit die Dateien? Was ist das für eine Software? Hat sie irgenwelche DLLs dabei, die für das Zippen genutzt werden können? Wenn ja, sind die dokumentiert und / oder können auch von anderer Software genutzt werden? 'ne Viertelstunde später: Mein WinRar (alt und angestaubt - Version 3.8) kann die mit WinRar erstellte ZIP-Dartei zwar lesen, meckert aber: Zitat:
|
AW: Zip Kompression / Store wählen?
Liste der Anhänge anzeigen (Anzahl: 1)
Es handelt sich um ein Spiel (World of Tanks) das diese Datei laden soll.
Im Spielverzeichniss hat es viele dll unter anderem eine 7z.dll und eine zlib1.dll Die Einstellungen in WinRAR habe ich alle auf Standart abgsehen von der Kompression=Speichern (Siehe Bid). Ebenfalls ist auf dem Bild ein Screenshot wie man eine solche Datei mit 7z erstellen soll. |
AW: Zip Kompression / Store wählen?
7z ist nicht ZIP.
Schau mal bitte hier, ob was brauchbares dabei ist: ![]() ![]() ![]() mehr unter: ![]() |
AW: Zip Kompression / Store wählen?
ok. besten dank. ich werde mir das morgen anschauen und testen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 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