上海中鲁通信技术有限公司 张世富
一、 前言
由于目前在WINDOWS环境下(指WINDOWS9.X,WINDOWS 2000,WINDOWS NT等环境,以下同)的一些程序的数据文件需要经常备份,但是操作系统或应用系统却没有提供比较方便的备份
程序。因此,需要人工进行周期性的备份,有时会因为工作人员的疏忽忘记备份当天数据,或者不能对数据文件进行完整的备份,从而对系统数据备份的利用造成一定的影响。
二、 设计技术基础
利用DELPHI编程实现定时程序的调用,结合基本的DOS批处理命令和WINDOWS的API函数调用,保证数据文件和数据目录的拷贝,同时可以根据对数据文件的具体要求实现数据文件的动态备份和静态备份。动态备份就是在要进行备份的应用系统运行过程中进行数据文件的备份,静态备份就是通过函数调用停止当前应用程序的运行,进行数据文件的备份,备份完毕调用程序,重新运行应用
程序。
三、 系统流程
备份
程序的流程如下图所示:
四、 系统实现
1、 配置文件的建立
(1) 文件拷贝运行文件
在运行定时
程序的目录下,建立COPY1.BAT批处理文件,内容如下:
@echo off
copy %1 %2
@echo on
实现文件的拷贝。
(2)目录拷贝运行文件
在运行定时
程序的目录下,建立XCOPY1.BAT批处理文件,内容如下:
@echo off
xcopy %1 %2 /E
@echo on
实现目录下文件的拷贝。
(3)建立新目录运行文件
在运行定时
程序的目录下,建立MKDIR1.BAT批处理文件,内容如下:
@echo off
mkdir %1
@echo on
实现新目录的建立。
(4)系统参数配置文件
在运行定时
程序的目录下,建立CFG.INI的批处理文件,内容如下:
[SERVER] //设置应用
程序的运行文件
SERVERNAME=D:\LOTUS\NOTES\NOTES.EXE
[DESTINATION] //设置备份文件和目录的一级子目录
PATHNAME=H:\TTT\
[DIRECTORYS] //需备份的目录文件
DIR1=H:\PLAY
DIR2=E:\API
DIR3=N //N结尾表示备份该目录之前的目录
DIR4=
DIR5=
//可以继续设定备份目录。
[FILES] //需备份的文件。
FILE1=H:\vss_files\hx.h
FILE2=H:\vss_files\c*.*
FILE3=N //N结尾表示备份该文件之前的文件
FILE4=
FILE5=
//可以继续设定备份文件。
[TIMER] //定时设定
INTERVAL=1 //TIMER
程序运行时间间隔
SLEEP1=1 //SLEEP1应用开始停止到拷贝的时间间隔
SLEEP2=2 //SLEEP2开始拷贝到应用
程序开始启动的时间间隔
WEEK=6 //WEEK 表示备份的星期的第几天,1—7,1为星期日
TIME=220000 //TIME 程序启动的时间220000表示为22:00:00
//以上时间单位均为分钟,并且TIMER大于SLEEP1和SLEEP2之和。
实现系统参数的配置。
(5) 备份日志记录文件
通过RECORD.TXT文件记录备份的日期和备份启动的时间。
2、 应用程序实现
(1) 在DELPHI的FORM中选取TIMER控件,控件参数可缺省。
(2) 参数初始化,在FORM的CREATE事件里,从配置文件中读入TIMER的各项参数,对系统运行参数进行初始化,主要参数为备份启动时间,备 份的时间间隔,静态备份时间日期等。程序如下:
procedure TSrvForm.FormCreate(Sender: TObject);
begin
Label2.Visible:=False;
lpSleep1:=StrToInt(FindName(''TIMER'',''SLEEP1''))*60*1000;
lpSleep2:=StrToInt(FindName(''TIMER'',''SLEEP2''))*60*1000;
lpInterval:=StrToInt(FindName(''TIMER'',''INTERVAL''))*60*1000;
spTime:=FindName(''TIMER'',''TIME'');
ipWeek:=StrToInt(FindName(''TIMER'',''WEEK''));
Timer1.Interval:=lpInterval ;
Timer1.Enabled:=True;
end;
(3) 建立调用函数,STOPSERVER为停止应用程序运行的函数,STARTSERVER为启动应用程序的函数,BACKUPDATA为数据文件的备份程序。
〈1〉procedure TSrvForm.StartServer(); //启动运行应用程序
Var
I,Ret :Integer;
sTemp :string