Je crois que vous devez dire quel type de JclCompressArchive créer, comme lui donner arch := TJcl7zCompressArchive.Create...
au lieu de JclCompressArchive.Create().
Si vous regardez la section « Hiérarchie des classes » de 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 ...
Mise à jour
Je pense que la bonne façon d'utiliser StackOverflow aurait été d'ajouter une nouvelle question, car après la mise à jour, c'est une question complètement différente.
Je ne sais pas pourquoi vous jeter à TJclCompressArchive à AddFile() et Compress(), il semble fonctionner pour moi sans les moulages
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;
@Ken Blanc - Je viens de mes reflète des modifications à qu'est-ce que vous et jasonpenny avez suggéré, mais je reçois toujours des fichiers de taille zéro mis dans mes archives ...? – croceldon
Ken, en changeant la déclaration de variable n'affectera rien. Tant que le type d'exécution de l'objet n'est pas abstrait, le type de la variable à la compilation n'a pas d'importance. C'est simplement le fonctionnement des méthodes virtuelles, abstraites ou non. –
Bienvenue sur Stack Overflow, Croceldon. Jason a raison. Votre modification modifie complètement la question. Votre question originale a été répondue. Veuillez supprimer la mise à jour et l'afficher en tant que nouvelle question. Puis revenez et acceptez la réponse de Jason. –