• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

        WINDOWS環(huán)境下的自動(dòng)備份系統(tǒng)

        WINDOWS環(huán)境下的自動(dòng)備份系統(tǒng)

        更新時(shí)間:2022-05-10 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        上海中魯通信技術(shù)有限公司 張世富

        一、 前言
        由于目前在WINDOWS環(huán)境下(指WINDOWS9.X,WINDOWS 2000,WINDOWS NT等環(huán)境,以下同)的一些程序的數(shù)據(jù)文件需要經(jīng)常備份,但是操作系統(tǒng)或應(yīng)用系統(tǒng)卻沒有提供比較方便的備份程序。因此,需要人工進(jìn)行周期性的備份,有時(shí)會(huì)因?yàn)楣ぷ魅藛T的疏忽忘記備份當(dāng)天數(shù)據(jù),或者不能對(duì)數(shù)據(jù)文件進(jìn)行完整的備份,從而對(duì)系統(tǒng)數(shù)據(jù)備份的利用造成一定的影響。
        二、 設(shè)計(jì)技術(shù)基礎(chǔ)
        利用DELPHI編程實(shí)現(xiàn)定時(shí)程序的調(diào)用,結(jié)合基本的DOS批處理命令和WINDOWS的API函數(shù)調(diào)用,保證數(shù)據(jù)文件和數(shù)據(jù)目錄的拷貝,同時(shí)可以根據(jù)對(duì)數(shù)據(jù)文件的具體要求實(shí)現(xiàn)數(shù)據(jù)文件的動(dòng)態(tài)備份和靜態(tài)備份。動(dòng)態(tài)備份就是在要進(jìn)行備份的應(yīng)用系統(tǒng)運(yùn)行過(guò)程中進(jìn)行數(shù)據(jù)文件的備份,靜態(tài)備份就是通過(guò)函數(shù)調(diào)用停止當(dāng)前應(yīng)用程序的運(yùn)行,進(jìn)行數(shù)據(jù)文件的備份,備份完畢調(diào)用程序,重新運(yùn)行應(yīng)用程序。
        三、 系統(tǒng)流程
        備份程序的流程如下圖所示:




        四、 系統(tǒng)實(shí)現(xiàn)
        1、 配置文件的建立
        (1) 文件拷貝運(yùn)行文件
        在運(yùn)行定時(shí)程序的目錄下,建立COPY1.BAT批處理文件,內(nèi)容如下:
        @echo off
        copy %1 %2
        @echo on
        實(shí)現(xiàn)文件的拷貝。
        (2)目錄拷貝運(yùn)行文件
        在運(yùn)行定時(shí)程序的目錄下,建立XCOPY1.BAT批處理文件,內(nèi)容如下:
        @echo off
        xcopy %1 %2 /E
        @echo on
        實(shí)現(xiàn)目錄下文件的拷貝。
        (3)建立新目錄運(yùn)行文件
        在運(yùn)行定時(shí)程序的目錄下,建立MKDIR1.BAT批處理文件,內(nèi)容如下:
        @echo off
        mkdir %1
        @echo on
        實(shí)現(xiàn)新目錄的建立。
        (4)系統(tǒng)參數(shù)配置文件
        在運(yùn)行定時(shí)程序的目錄下,建立CFG.INI的批處理文件,內(nèi)容如下:
        [SERVER] //設(shè)置應(yīng)用程序的運(yùn)行文件
        SERVERNAME=D:\LOTUS\NOTES\NOTES.EXE
        [DESTINATION] //設(shè)置備份文件和目錄的一級(jí)子目錄
        PATHNAME=H:\TTT\
        [DIRECTORYS] //需備份的目錄文件
        DIR1=H:\PLAY
        DIR2=E:\API
        DIR3=N //N結(jié)尾表示備份該目錄之前的目錄
        DIR4=
        DIR5=
        //可以繼續(xù)設(shè)定備份目錄。
        [FILES] //需備份的文件。
        FILE1=H:\vss_files\hx.h
        FILE2=H:\vss_files\c*.*
        FILE3=N //N結(jié)尾表示備份該文件之前的文件
        FILE4=
        FILE5=
        //可以繼續(xù)設(shè)定備份文件。
        [TIMER] //定時(shí)設(shè)定
        INTERVAL=1 //TIMER 程序運(yùn)行時(shí)間間隔
        SLEEP1=1 //SLEEP1應(yīng)用開始停止到拷貝的時(shí)間間隔
        SLEEP2=2 //SLEEP2開始拷貝到應(yīng)用程序開始啟動(dòng)的時(shí)間間隔
        WEEK=6 //WEEK 表示備份的星期的第幾天,1—7,1為星期日
        TIME=220000 //TIME 程序啟動(dòng)的時(shí)間220000表示為22:00:00
        //以上時(shí)間單位均為分鐘,并且TIMER大于SLEEP1和SLEEP2之和。
        實(shí)現(xiàn)系統(tǒng)參數(shù)的配置。
        (5) 備份日志記錄文件
        通過(guò)RECORD.TXT文件記錄備份的日期和備份啟動(dòng)的時(shí)間。
        2、 應(yīng)用程序?qū)崿F(xiàn)
        (1) 在DELPHI的FORM中選取TIMER控件,控件參數(shù)可缺省。
        (2) 參數(shù)初始化,在FORM的CREATE事件里,從配置文件中讀入TIMER的各項(xiàng)參數(shù),對(duì)系統(tǒng)運(yùn)行參數(shù)進(jìn)行初始化,主要參數(shù)為備份啟動(dòng)時(shí)間,備 份的時(shí)間間隔,靜態(tài)備份時(shí)間日期等。程序如下:
        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) 建立調(diào)用函數(shù),STOPSERVER為停止應(yīng)用程序運(yùn)行的函數(shù),STARTSERVER為啟動(dòng)應(yīng)用程序的函數(shù),BACKUPDATA為數(shù)據(jù)文件的備份程序。
        〈1〉procedure TSrvForm.StartServer(); //啟動(dòng)運(yùn)行應(yīng)用程序
        Var
        I,Ret :Integer;
        sTemp :string;
        begin
        sTemp:=FindName('SERVER','SERVERNAME');
        I:=WinExec(PChar(sTemp),SW_SHOW);
        if I<31 then
        begin
        Ret:=Application.MessageBox('Start NotesServer Error!','Error!',MB_OK);
        Exit;
        end;
        end;
        〈2〉procedure TSrvForm.StopServer(); //停止運(yùn)行應(yīng)用程序
        Var
        I,Ret :Integer;
        sTemp :string;
        begin
        sTemp:=FindName('SERVER','SERVERNAME')+' -quit';
        I:=WinExec(PChar(sTemp),0);
        if I<31 then
        begin
        Ret:=Application.MessageBox('Stop NotesServer Error!','Error!',MB_OK);
        Exit;
        end;
        end;
        〈3〉procedure TSrvForm.BackupData(); //啟動(dòng)數(shù)據(jù)備份程序
        Var
        sConent,sResourePath,sResoureFile,SDestPath :String;
        sTemp,sDate,sConst,sDir :string;
        I,J :Integer;
        begin
        sDate:=FormatDateTime('yyyymmdd',Date());
        SDestPath:=FindName('DESTINATION','PATHNAME');
        sTemp:=SDestPath+sDate;
        sConst:=sTemp;//Don't change this variable.
        sConent:='.\mkdir1.bat '+sTemp;
        I:=WinExec(PChar(sConent),0); //Create data store path
        if I<31 then
        begin
        Application.MessageBox('Mkdir Error!','Error!',MB_OK);
        Exit;
        end;
        //Copy all direstories and files
        J:=1;
        while 1=1 do
        begin
        sResourePath:=FindName('DIRECTORYS','DIR'+IntToStr(J));
        J:=J+1;
        if sResourePath ='N' then break;
        //create same name directory
        sDir:=sConst+FindLastDir(sResourePath);
        I:=WinExec(PChar('.\mkdir1.bat '+sDir),0); //Create data store path
        if I<31 then
        begin
        Application.MessageBox('Mkdir Error!','Error!',MB_OK);
        Exit;
        end;
        //create end
        sConent:='.\xcopy1.bat '+sResourePath+' '+ sDir;
        I:=WinExec(PChar(sConent),0);
        if I<31 then
        begin
        Application.MessageBox('Copy Error!','Error!',MB_OK);
        Exit;
        end;
        end;
        //Copy all files
        J:=1;
        while 1=1 do
        begin
        sResoureFile:=FindName('FILES','FILE'+IntToStr(J));
        J:=J+1;
        if sResoureFile ='N' then break;
        sConent:='.\copy1.bat '+ sResoureFile +' '+ sConst;
        I:=WinExec(PChar(sConent),0);
        if I<31 then
        begin
        Application.MessageBox('Copy Error!','Error!',MB_OK);
        Exit;
        end;
        end;
        end;
        (4) TIMER定時(shí)備份程序, 取當(dāng)前時(shí)間,根據(jù)規(guī)則生成一格式為‘YYYYMMDD’的字符串,作為備份的子目錄,用以表示備份數(shù)據(jù)的日期。從備份日志文件中查找是否已經(jīng)備份,若已經(jīng)備份退出程序,無(wú)備份則創(chuàng)建備份的子目錄。如果是備份為靜態(tài)備份,停止運(yùn)行應(yīng)用程序,若為動(dòng)態(tài)備份,不停止應(yīng)用程序的運(yùn)行,進(jìn)行數(shù)據(jù)的備份,并根據(jù)實(shí)際的備份時(shí)間進(jìn)行延時(shí)。備份完畢,記錄備份日志。程序如下:
        procedure TSrvForm.Timer1Timer(Sender: TObject); //定時(shí)程序調(diào)用
        Var
        f: TextFile;
        sTemp,sDate,sBegin:string;
        iPos:Integer;
        begin
        sDate:=FormatDateTime('yyyymmdd',Now());
        sBegin:='['+FormatDateTime('hhnnss',Now())+']';
        //backup or not
        AssignFile(f,'record.txt');
        Reset(f);
        iPos:=0;
        while NOT EOF(f) do
        begin
        Readln(f,sTemp);
        iPos:=Pos(sDate,sTemp);
        if iPos>0 then break;
        end;
        CloseFile(f);
        if iPos>0 then exit;//Already backup
        Label2.Visible:=True;
        if (DayOfWeek(Date())=ipWeek) and ( FormatDateTime('hhnnss',Now())>spTime) then
        begin
        StopSrv();
        Sleep(lpSleep1);//wait for lpSleep1/1000/60 minutes
        BackupData();
        Sleep(lpSleep2);//wait for lpSleep2/1000/60 minutes
        StartSrv();
        end
        else
        begin
        if (DayOfWeek(Date())<>ipWeek) and ( FormatDateTime('hhnnss',Now())>spTime) then
        BackupData()
        else
        begin
        Label2.Visible:=False;
        exit;
        end;
        end;
        //backup data finish,record the date and time to file1.txt
        sTemp:= ' ['+FormatDateTime('yyyymmdd',Now())+'] '+sBegin+' ['+FormatDateTime('hhnnss',Now())+'] ';
        AssignFile(f,'record.txt');
        Append(f);
        Writeln(f, sTemp);//Add backup flag
        Flush(f); { ensures that the text was actually written to file }
        { insert code here that would require a Flush before closing the file }
        CloseFile(f);
        Label2.Visible:=False;
        end;
        (5) 程序?qū)崿F(xiàn)中需調(diào)用WINDOWS的API函數(shù)WINEXEC。
        五、 系統(tǒng)特點(diǎn)
        1、 使用方便,只需將執(zhí)行程序、各配置文件建立在某一目錄下即可運(yùn)行。
        2、 參數(shù)配置靈活,通過(guò)設(shè)置CFG.INI即可滿足應(yīng)用程序的調(diào)用和實(shí)現(xiàn)。
        3、 即可以在WINDOWS 9.X下運(yùn)行,也可以在WINDOWS NT下運(yùn)行。
        4、 程序運(yùn)行過(guò)程中,無(wú)須人工干預(yù)。
        5、 程序占用系統(tǒng)資源少。
        6、 、、、、、、
        六、 結(jié)束語(yǔ)
        該備份程序已經(jīng)通過(guò)DELPHI實(shí)現(xiàn),在WINDOWS98,WINDOWS 2000,WINDOWS NT 4上運(yùn)行成功,該應(yīng)用程序自動(dòng)備份LOTUS NOTES系統(tǒng)下 某目錄下的文件和某幾個(gè)目錄,周五進(jìn)行靜態(tài)備份,其它時(shí)間進(jìn)行動(dòng)態(tài)備份,每天備份一次。系統(tǒng)運(yùn)行良好,節(jié)省了人工備份的時(shí)間 和減少了出錯(cuò)誤的可能性。

        如果有對(duì)此系統(tǒng)感興趣的人員,可以免費(fèi)獲取程序源碼,與作者聯(lián)系方式,E-MAIL:ZSF@PUB.ONLINE.JN.SD.CN。

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 国产精品亚洲αv天堂无码| 国产精品免费无遮挡无码永久视频 | 亚洲自偷自偷偷色无码中文| 亚洲av永久无码精品秋霞电影秋 | 四虎免费在线观看| 亚洲第一页在线观看| 一级特黄aa毛片免费观看| 亚洲熟女一区二区三区| a毛片免费播放全部完整| 亚洲精品乱码久久久久66| 四虎国产精品免费永久在线| 亚洲成在人线av| 亚洲狠狠狠一区二区三区| 99爱在线精品视频免费观看9| 亚洲一区二区电影| 4444www免费看| 亚洲一卡2卡3卡4卡国产网站| 国产四虎免费精品视频| 亚洲国产精品午夜电影| 人禽杂交18禁网站免费| 亚洲国产AV无码一区二区三区 | 国产成人精品日本亚洲专| 永久中文字幕免费视频网站| 国产成人综合亚洲一区| 亚洲人成网站18禁止一区| 免费在线看污视频| 亚洲日本久久一区二区va| 国产黄色片在线免费观看| 国产久爱免费精品视频| 亚洲视频中文字幕在线| 妞干网免费视频在线观看| 色爽黄1000部免费软件下载| 亚洲国产精品一区二区久久hs| 91精品国产免费网站| 亚洲va中文字幕| 亚洲av综合av一区| 大陆一级毛片免费视频观看| 一个人看的www免费高清| 久久亚洲sm情趣捆绑调教| 国产成人精品免费视频软件| 中文字幕无码毛片免费看|