Frage

Ich habe den folgenden Code, der immer mit einer „Zusammenfassung Fehler“ fehlschlägt:

  arch := TJclCompressArchive.Create(GetDesktop + 'Support.7z');
  try
    with arch do
    begin

      if FindFirst('*.log', faAnyFile, sr) = 0 then
      begin
        repeat
          AddFile(ExtractFileName(sr.Name),sr.Name);
        until FindNext(sr) <> 0;

        FindClose(sr);
      end;

      Compress; //this line throws the error
    end;
  finally
    arch.free;
  end;

Allerdings habe ich immer, dass Fehler, wenn zu komprimieren versucht. Alle Ideen, was ich falsch mache hier?

War es hilfreich?

Lösung

Ich glaube, man muss ihm sagen, welche Art von JclCompressArchive zu schaffen, wie es gibt arch := TJcl7zCompressArchive.Create... statt JclCompressArchive.Create ().

Wenn Sie auf dem „Klassenhierarchie“ aussehen Abschnitt JclCompression.pas:


TJclCompressionArchive
   |
   |-- TJclCompressArchive
   |    |
   |    |-- TJclSevenzipCompressArchive
   |         |
   |         |-- TJclZipCompressArchive     handled by sevenzip ...
   |         |-- TJclBZ2CompressArchive     handled by sevenzip ...
   |         |-- TJcl7zCompressArchive      handled by sevenzip ...
   |         |-- TJclTarCompressArchive     handled by sevenzip ...
   |         |-- TJclGZipCompressArchive    handled by sevenzip ...
   |         |-- TJclXzCompressArchive      handled by sevenzip ...

Update
Ich denke, die richtige Art und Weise zu verwenden, würde Stackoverflow eine neue Frage hinzuzufügen gewesen, da nach dem Update, es ist eine ganz andere Frage ist.

Ich weiß nicht, warum Sie TJclCompressArchive zu AddFile sind Gießen () und Compress (), es scheint für mich arbeiten, ohne dass die Abgüsse

const
  FILENAME = 'Support.7z';
var
  archiveclass: TJCLUpdateArchiveClass;
  arch: TJclUpdateArchive;
  sr: TSearchRec;
begin
  archiveclass := GetArchiveFormats.FindUpdateFormat(FILENAME);

  if not Assigned(archiveclass) then
    raise Exception.Create('Could not determine the Format of ' + FILENAME);

  arch := archiveclass.Create(FILENAME);
  try
    // if FileExists(FILENAME) then // if you want to add any new files,
    //   arch.ListFiles;            // in addition to what is already there

    if FindFirst('*.pas', faAnyFile, sr) = 0 then
    begin
      repeat
        arch.AddFile(ExtractFileName(sr.Name),sr.Name);
      until FindNext(sr) <> 0;

      FindClose(sr);
    end;

    arch.Compress;
  finally
    arch.free;
  end;
end;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top