Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zip Kompression / Store wählen? (https://www.delphipraxis.net/192058-zip-kompression-store-waehlen.html)

gee21 17. Mär 2017 20:51

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 :?

Luckie 17. Mär 2017 20:55

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.

gee21 17. Mär 2017 21:08

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);

nahpets 17. Mär 2017 21:23

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.

Uwe Raabe 17. Mär 2017 21:50

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.

nahpets 17. Mär 2017 22:10

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:

! e:\WINRARv.zip: Unerwartetes Archivende.

gee21 17. Mär 2017 22:31

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.

nahpets 17. Mär 2017 22:45

AW: Zip Kompression / Store wählen?
 
7z ist nicht ZIP.

Schau mal bitte hier, ob was brauchbares dabei ist:

http://www.delphipraxis.net/41394-7-...nsteueren.html

LZMA Or 7zip in Delphi

7z in Delphi 2007

mehr unter: source delphi 7z.dll

gee21 17. Mär 2017 23:03

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 23:43 Uhr.
Seite 2 von 2     12   

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