Warum erhalte ich einen „abstrakten Fehler“, wenn TJclCompressArchive.Compress Aufruf?
-
21-09-2019 - |
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?
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;