var
cancel: Boolean;
...
procedure MakeBackup(Filename, BackupPath: string);
var fs: TEXTFILE;
s1, s2: TFileStream;
BkfCount: Integer;
FBytes, BBytes, ByteCount: LongInt;
FName, FExt: string;
begin
if not FileExists(Filename) or not DirectoryExists(BackupPath)
then begin caption:='Fehler'; Exit; end;
s1:=TFileStream.Create(Filename, fmOpenRead);
FName:=ChangeFileExt(ExtractFileName(Filename), ''); //Filename
ohne Path u.Ext
FExt:=ExtractFileExt(ExtractFileName(Filename)); //FilenameExt
FBytes:=s1.size; //Dateigröße
//Backup-Liste sichern
AssignFile(fs, AddBackSlash(BackupPath)+FName+'.bst');
{$i-} Rewrite(fs); {$i+}
Writeln(fs, FName); //Filename ohne Path u.
Ext
Writeln(fs, FExt); //FilenameExt
Writeln(fs, inttostr(FBytes)); //Dateigröße
von Filename
CloseFile(fs);
//Backup starten
ByteCount:=FBytes; BkfCount:=1; cancel:=False;
while not cancel do
begin
BBytes:=DiskFree(ord(AnsiUpperCase(BackupPath)[1])-64); //freie Bytes auf Datenträger
if BBytes>500 then //wenigstens
500 sollten frei sein
begin
if ByteCount<BBytes then
BBytes:=ByteCount;
s2:=TFileStream.Create(AddBackSlash(BackupPath)+FName+inttostr(BkfCount)+'.bkp',
fmCreate);
s2.CopyFrom(s1, BBytes);
s2.Destroy;
inc(BkfCount); //zählt
Backupfiles
ByteCount:=ByteCount-BBytes; if ByteCount=0
then Break;
end;
if not cancel then
if MessageDlg('Bitte nächsten
Datenträger einlegen.', mtInformation, [mbYes, mbNo], 0) = mrNo then
Break;
end; //while
s1.Destroy;
end;
...
procedure RemoveBackup(BackupList, Filepath: string);
var fo: TEXTFILE;
s1, s2: TFileStream;
BkfCount: Integer;
FBytes, BBytes, ByteCount: LongInt;
FName, FExt, FBytesCopy: string;
begin
if not FileExists(BackupList) or not DirectoryExists(Filepath)
then begin caption:='Fehler'; Exit; end;
//Backupliste einlesen
AssignFile(fo, BackupList);
{$i-} Reset(fo); {$i+}
if not eof(fo) then Readln(fo, FName); //Filename
ohne Phath u. Ext
if not eof(fo) then Readln(fo, FExt); //FilenameExt
if not eof(fo) then Readln(fo, FBytesCopy); FBytes:=strtoint(FBytesCopy);
//Dateigröße von Filename
CloseFile(fo);
//Backup rückgängig machen
s1:=TFileStream.Create(AddBackSlash(Filepath)+FName+FExt, fmCreate);
ByteCount:=FBytes; BkfCount:=1; cancel:=False;
while not cancel do
begin
//nächster Datenträger
bitte ...
if not FileExists(AddBackSlash(ExtractFilePath(BackupList))+FName+inttostr(BkfCount)+'.bkp')
then
if MessageDlg('Bitte nächsten
Datenträger einlegen.', mtInformation, [mbYes, mbNo], 0) = mrNo then
Break;
//Datei konnte nicht auf dem eingelegten
Datenträger gefunden werden->warten
while not FileExists(AddBackSlash(ExtractFilePath(BackupList))+FName+inttostr(BkfCount)+'.bkp')
do
if MessageDlg('Konnte Datei nicht
finden. Bitte anderen Datenträger einlegen.', mtInformation, [mbYes,
mbNo], 0) = mrNo then Break;
s2:=TFileStream.Create(AddBackSlash(ExtractFilePath(BackupList))+FName+inttostr(BkfCount)+'.bkp',
fmOpenRead);
BBytes:=s2.size;
s1.CopyFrom(s2, BBytes);
s2.Destroy;
inc(BkfCount);
ByteCount:=ByteCount-BBytes; if ByteCount=0 then
Break;
end; //while
s1.Destroy;
end;
Zurück zur Hauptseite