📄 filebackupthreadunit.pas
字号:
//*-----------------------------------------------------------------------------
//* 系统名称:数据自动备份系统
//* 作 者:陈春华
//* 开发时间:2005
//* Windows2000 Server + SQL Server2000 + Delphi7
//* 功能简介:
//* 软件可自动完成SQL Server数据库和文档的数据定时自动备份,
//* 由用户选择对哪些数据库或文档进行数据备份,提供对备份、还原
//* 数据作业的管理、分析、日志跟踪等功能,备份频率不受限制。
//*-----------------------------------------------------------------------------
unit FileBackupThreadUnit;
interface
uses
Classes, SysUtils, Windows, IniFiles;
type
TFileBackupThread = class(TThread)
private
{ Private declarations }
itemName: String; //文件备份项目名称
sourceDir: String; //源数据
amiDir: String; //目的空间
atPointTime: TdateTime; //差异控制时间
freeSize : real; //目的空间剩余
dirSizeAll: real; //源数据量
procedure BackupDirDone;
protected
procedure Execute; override;
public
constructor Create(_sourceDir, _amiDir, _itemName: String; _atPointTime:TDateTime; _freeSize: real);
end;
implementation
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TFileBackupThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TFileBackupThread }
uses
SqlFunctionUnit, MainUnit;
constructor TFileBackupThread.Create(_sourceDir, _amiDir, _itemName: String; _atPointTime:TDateTime; _freeSize:real);
begin
sourceDir:=_sourceDir;
amiDir:=_amiDir;
itemName:=_itemName;
atPointTime:=_atPointTime;
freeSize:=_freeSize;
inherited Create(True);
end;
procedure TFileBackupThread.BackupDirDone;
var
logfile:textFile;
beginTime, endTime: TDateTime;
isWrong: Boolean;
isfull: Boolean;
inifile: TIniFile;
begin
try
dirSizeAll:=0;
isWrong:=False;
isfull:=False;
beginTime:=now;
AssignFile(LogFile,ExtractFilePath(ParamStr(0))+'\Log\FileBackupLog.log');
if fileExists(ExtractFilePath(ParamStr(0))+'\Log\FileBackupLog.log') then
Append(LogFile)
else
Rewrite(LogFile);
GetDirSize(sourceDir,atPointTime,dirSizeAll);
if dirSizeAll>freeSize then
begin
isWrong:=True;
isfull:=True;
end
else
begin
//^---
try
DoCopyDir(sourceDir,amiDir,atPointTime);
except
isWrong:=True;
end;
//^ 文件传输(备份过程)
end;
finally
endTime:=now;
if not isWrong then //报错处理
begin
try
inifile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'\'+itemName+'.ini');
inifile.WriteFloat('备份设置','目的地址空间',freeSize-dirSizeAll);
inifile.WriteDateTime('备份设置','最近一次备份时刻',beginTime);
finally
inifile.Free;
end;
writeln(LogFile,DateTimeToStr(beginTime)+' '+itemName+'成功备份到'+amiDir+',耗时:'+TimeToStr(endTime-beginTime)+',备份量:'+FormatFloat('#,##0.00',dirSizeAll)+'MB');
MainForm.StatusBar1.Panels[1].Text:='文件项目'+itemName+'备份成功!'+DateTimeToStr(endTime);
end
else
begin
if isfull then
begin
writeln(LogFile,DateTimeToStr(beginTime)+' '+itemName+'备份失败。空间不足!');
MainForm.StatusBar1.Panels[1].Text:='文件项目'+itemName+'备份失败,空间不足!'+DateTimeToStr(endTime);
end
else
begin
writeln(LogFile,DateTimeToStr(beginTime)+' '+itemName+'备份失败。备份文件未能成功备份到指定目的地址!');
MainForm.StatusBar1.Panels[1].Text:='文件项目'+itemName+'备份失败,备份文件未能成功备份到指定目的地址!'+DateTimeToStr(endTime);
end;
end;
CloseFile(logFile);
end;
end;
procedure TFileBackupThread.Execute;
begin
{ Place thread code here }
FreeOnTerminate:=True;
synchronize(BackupDirDone);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -