Einzelnen Beitrag anzeigen

gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Zip Kompression / Store wählen?

  Alt 17. Mär 2017, 14:24
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:
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;
rufe es dann so auf:
Delphi-Quellcode:
    ZipFile := TZipFile.Create;
    ZipFile.Open(outpath2, zmWrite);
    DoZip(ExtractFilePath(Application.Exename)+'temp\res', ZipFile);
    ZipFile.Close;
    FreeAndNil(ZipFile);
Robert
  Mit Zitat antworten Zitat