Registriert seit: 28. Mai 2008
655 Beiträge
Delphi 10.1 Berlin Starter
|
AW: TZipFile
4. Dez 2021, 11:45
Delphi-Quellcode:
procedure TWZZipFile.AddandOverride(const aFilename: string; const ArchiveFileName: string);
var
TempPa, TempName: string;
List: TStringDynArray;
i: Integer;
Done: Boolean;
begin
if TFileAttribute.faReadOnly in TFile.GetAttributes(ArchiveFilename, false) then begin
ShowMessage('Archiv "'+ExtractFilename(ArchiveFilename)+'"ist schreibgeschützt!');
Exit;
end;
Done := false;
if IsValid(ArchiveFilename) then begin
// TempPa := TPath.GetTempPath+Format('~~~%.4x',[Random($FFFF)]);
TempPa := TPath.Combine(TPath.GetTempPath, TPath.GetRandomFileName);
TDirectory.CreateDirectory(TempPa);
Open(ArchiveFilename, zmRead);
ExtractAll(TempPa);
if CopyFile(PWideChar(aFilename), PWideChar(TPath.Combine(TempPa, ExtractFilename(aFilename))), false) then
begin
List := TDirectory.GetFiles(TempPa);
TempName := ExtractFilePath(ArchiveFilename) + ExtractFilename(TPath.GetTempFileName);
Open(TempName, zmWrite);
for i := Low(List) to High(List) do begin
Add(List[i]);
TFile.Delete(List[i]);
end;
Close;
Done := true;
end;
Close;
end;
if Done then begin
TFile.Delete(ArchiveFilename);
if RenameFile(TempName, ArchiveFilename) then
TDirectory.Delete(TempPa, true);
end;
end;
procedure TWZZipFile.AddandOverride(const aFileNames: TStrings; const ArchiveFileName: string);
var
TempPa, TempName: string;
List: TStringDynArray;
i: Integer;
Done: Boolean;
begin
if TFileAttribute.faReadOnly in TFile.GetAttributes(ArchiveFilename, false) then begin
ShowMessage('Archiv "'+ExtractFilename(ArchiveFilename)+'"ist schreibgeschützt!');
Exit;
end;
Done := false;
if IsValid(ArchiveFilename) then begin
TempPa := TPath.Combine(TPath.GetTempPath, TPath.GetRandomFileName);
TDirectory.CreateDirectory(TempPa);
Open(ArchiveFilename, zmRead);
ExtractAll(TempPa);
for i := 0 to aFilenames.Count - 1 do begin
Done := CopyFile(PWideChar(aFilenames[i]), PWideChar(TPath.Combine(TempPa, ExtractFilename(aFilenames[i]))), false);
if not Done then Break;
end;
if Done then begin
Done := false;
List := TDirectory.GetFiles(TempPa);
TempName := ExtractFilePath(ArchiveFilename) + ExtractFilename(TPath.GetTempFileName);
Open(TempName, zmWrite);
for i := Low(List) to High(List) do begin
Add(List[i]);
TFile.Delete(List[i]);
end;
Close;
Done := true;
end;
Close;
end;
if Done then begin
TFile.Delete(ArchiveFilename);
if RenameFile(TempName, ArchiveFilename) then
TDirectory.Delete(TempPa, true);
end;
end;
- Archiv in Temp-Ordner auspacken
- Datei(en) dort hinein kopieren und eventuell überschreiben
- Neues Archiv mit Add anlegen
- Altes Archiv löschen und neues umbebenenn.
So habe ich es mir vorgegetellt. Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
Geändert von Willie1 ( 4. Dez 2021 um 11:47 Uhr)
Grund: Ach ja, die Rechtschreibung
|
|
Zitat
|