I’d like to replace a file (= delete old and add new) in a zip archive with the Delphi XE2/XE3 standard System.Zip unit. But there are no replace/delete methods. Does anybody have an idea how it could be achieved without needing to extract all files and add them to a new archive?
I have this code, but it adds the “document.txt” once more if it’s already present:
var
ZipFile: TZipFile;
SS: TStringStream;
const
ZipDocument = 'E:\document.zip';
begin
ZipFile := TZipFile.Create; //Zipfile: TZipFile
SS := TStringStream.Create('hello');
try
if FileExists(ZipDocument) then
ZipFile.Open(ZipDocument, zmReadWrite)
else
ZipFile.Open(ZipDocument, zmWrite);
ZipFile.Add(SS, 'document.txt');
ZipFile.Close;
finally
SS.Free;
ZipFile.Free;
end;
end;
Note: I used TPAbbrevia before (that did the job), but I’d like to use Delphi’s Zip unit now. So please do not answer something like “use another library”. Thank you.
I’d recommend Abbrevia because I’m biased :), you already know it, and it doesn’t require any hacks. Barring that, here’s your hack:
Usage: