ROTINA - Backup automatizado usando a HBZIP

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

ROTINA - Backup automatizado usando a HBZIP

Mensagem por rochinha »

Amiguinhos

Esta rotina possui varias caracteristicas que podem ser exploradas em seus aplicativos como compactação de arquivos, armazenamento de informações em arquivos .INI, trabalho em background como serviço.

O codigo foi preparado em Fivewin e pode muito bem ser adaptado para ser usado de outras formas pois trata-se de uma carcaça que faz uso da API do Windows e da biblioteca do Harbour HBZIP.

A primeira parte do codigo trate-se do coração:

Código: Selecionar todos

#include "FiveWin.ch"
#include "dll.ch" 

#DEFINE WM_SYSCOMMAND  274     // &H112
#DEFINE SC_TASKLIST   61744    //&HF130
#DEFINE SC_SCREENSAVE 61760   // &HF140
#DEFINE SW_HIDE           0   // &H0
#DEFINE SW_SHOWNA         8   // &H8
#DEFINE SW_SHOW           5   // &H5
#DEFINE SW_SHOWNORMAL     1
#DEFINE SC_MONITORPOWER  61808   //&HF170   Gracias a Ramon Ramirez por la info
#DEFINE SM_CLEANBOOT     67

#DEFINE GWL_EXSTYLE   (-20) 
#DEFINE WS_EX_LAYERED 0x00080000 
#DEFINE LWA_ALPHA     0x00000002 
#DEFINE LWA_COLORKEY  0x00000001 

#DEFINE GW_CHILD      5
#DEFINE GW_HWNDNEXT   2
#DEFINE RT_BITMAP     2
#DEFINE MB_ICONEXCLAMATION 48
#DEFINE CBM_INIT 4 && should move to prg header
#DEFINE DIB_RGB_COLORS 0 && should move to prg header

static hLib, hDib

Function Main(_tempo_) 
   Local oB, oApp, oIcon, oTimer, cImgFile := "service.bmp", oClp
   public cUsuario := space(15), cImage, cIMGAlerta, oEsconde, cPath
   Default _tempo_ := "05"
   lBKPAlerta := .f.
   lStatus    := .f.
   cPath      := cFilePath( GetModuleFileName( GetInstance() ) )
   if !file( cPath+"5vbackup.ini" )
      NFWBackup()
   endif
   cBKPName   := "BK"+strtran(dtoc(date()),"/","")+".ZIP"
   cZIPName   := VerifyINI( "BACKUP" , "Nome"      , cBKPName                      , cPath+"5vbackup.ini", .t. )
   cZIPEmail  := VerifyINI( "BACKUP" , "Email"     , "irochinha@itelefonica.com.br", cPath+"5vbackup.ini" )
   cZIPFiles  := VerifyINI( "BACKUP" , "Arquivos"  , "*.DBF;*.DBT;*.FPT;*.ARR;*.ETI;*.FRM;*.HRB;*.VAL;*.DAT;*.INI", cPath+"5vbackup.ini" )
   nZIPNivel  := VerifyINI( "BACKUP" , "Nivel"     , 8                             , cPath+"5vbackup.ini" )
   lOverWrite := VerifyINI( "BACKUP" , "Reescreve" , "S"                           , cPath+"5vbackup.ini" )
   cPassword  := VerifyINI( "BACKUP" , "PassWord"  , Codifica("5volution")         , cPath+"5vbackup.ini" )
   cBKPAuto   := VerifyINI( "BACKUP" , "AUTOMATICO", "N"                           , cPath+"5vbackup.ini" )
   cBKPDest   := VerifyINI( "BACKUP" , "DESTINO"   , cPath                         , cPath+"5vbackup.ini" )
   cBKPOrig   := VerifyINI( "BACKUP" , "ORIGEM"    , cPath                         , cPath+"5vbackup.ini" )
                 VerifyINI( "BACKUP" , "LEMBRAR"   , "S"                           , cPath+"5vbackup.ini" )
                 VerifyINI( "BACKUP" , "PUBLICO"   , "N"                           , cPath+"5vbackup.ini" )
   nTempo     := VerifyINI( "BACKUP" , "Tempo"     , "005"                         , cPath+"5vbackup.ini" )
   cBKPAlerta := VerifyINI( "BACKUP" , "Alerta"    , "SIM"                         , cPath+"5vbackup.ini" )
   cBKPHora   := VerifyINI( "BACKUP" , "Hora"      , "173000"                      , cPath+"5vbackup.ini" )

   //---------------
   ServiceProcess(1) 
   //---------------
   DEFINE BRUSH oB COLOR CLR_HGRAY
   DEFINE ICON oIcon FILE "LOGO.ICO"
   DEFINE CLIPBOARD oClp OF oApp
   //ShowWindow( FindWindow(nil,'Program Manager'), SW_SHOW)
   //ShowWindow(FindWindow( 'Shell_TrayWnd',nil), SW_SHOWNA)
   //if ! lStatus
   //   cBmp := "service.bmp"
   //   DEFINE BRUSH  oBrush STYLE NULL
   //   DEFINE BITMAP oBmp FILENAME cBmp
   //          hDC    := oBmp:hDC
   //   DEFINE WINDOW oEsconde FROM 0,0 TO 600,800 PIXEL BRUSH oBrush STYLE WS_POPUP
   //   ACTIVATE WINDOW oEsconde ON PAINT PalBmpDraw( hDC, 0, 0, oBmp:hBitmap )
   //endif
   DEFINE WINDOW oApp FROM 0,0 to 1,1 pixel TITLE "5Vbkpsvc" BRUSH oB STYLE WS_POPUP ICON "5Vbkpsvc.ico"
          DEFINE TIMER oTimer OF oApp INTERVAL (val(nTempo)*1000) ACTION GravaProcess()
          ACTIVATE TIMER oTimer
   ACTIVATE WINDOW oApp ON INIT (Shell_NotifyIcon( 0, "5vbkpsvc.ico" ), oApp:Hide()) //VALID (oEsconde:End(), .t.)
   ShowWindow( FindWindow(nil,'Program Manager'), SW_SHOW)
   ShowWindow(FindWindow( 'Shell_TrayWnd',nil), SW_SHOWNA)
   Return NIL                   

//-------------------------------------
Function GravaProcess()
//-------------------------------------
   cPath      := cFilePath( GetModuleFileName( GetInstance() ) )
   cBKPHora   := VerifyINI( "BACKUP" , "Hora"      , "173000"                      , cPath+"5vbackup.ini" )
   cBKPAlerta := VerifyINI( "BACKUP" , "Alerta"    , "SIM"                         , cPath+"5vbackup.ini" )
   cZIPName   := VerifyINI( "BACKUP" , "Nome"      , cBKPName                      , cPath+"5vbackup.ini", .t. )
   cBKPOrig   := VerifyINI( "BACKUP" , "ORIGEM"    , cPath                         , cPath+"5vbackup.ini" )
   cBKPDest   := VerifyINI( "BACKUP" , "DESTINO"   , cPath                         , cPath+"5vbackup.ini" )
   if Val(TTOS(time())) > Val(cBKPHora)
      if cBKPAlerta = "SIM"
         if ! lBKPAlerta
            lBKPAlerta := .t.
            if MsgYesNo( "Backup de seguranca de hoje nao existe. Deseja efetuar o backup?", "Atencao" )
               ZIPBackup()
            endif
            lBKPAlerta := .f.
         endif
      else
         FErase(cBKPOrig+"\"+cZIPName)
         ZIPBackup()
      endif
   endif
   Return NIL

//-------------------------------------
Function ServiceProcess( mode ) 
//-------------------------------------
   Local nProcessId := 0 
   Default mode := 0 
   nProcessId := GCP( ) 
   If Abs( nProcessId ) > 0 
      RSProcess( nProcessId, mode ) 
   Endif 
   RETURN 

//-------------------------------------
Function Ballon(cBallonMsg,nBallonTime)
//-------------------------------------
   local oDlgBallon, oBrush
   default cBallonMsg := "Nova mensagem chegando..."
   DEFINE WINDOW oDlgBallon ;
          FROM GetSysMetrics(1),GetSysMetrics(0)-300 TO 200,200 PIXEL ;
          COLOR nRGB(255,255,255),nRGB(255,255,230) ;
          NO CAPTION BORDER NONE
          @ 5, 5 GET cBallonMsg MEMO OF oDlgBallon SIZE 195,195 PIXEL COLOR nRGB(000,000,000),nRGB(255,255,230) NOBORDER NO MODIFY NO VSCROLL
   //ACTIVATE WINDOW oDlgBallon ON INIT ( LayeredWindow( oDlgBallon, 070 ), MoveDLG(oDlgBallon,nBallonTime) )
   ACTIVATE WINDOW oDlgBallon ON INIT MoveDLG(oDlgBallon,nBallonTime)
   return nil

//-------------------------------------
Function LayeredWindow( oWnd, nLay ) 
//-------------------------------------
   //SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, GetWindowLong( oWnd:hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED ) 
   SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_BORDER )
   SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_EX_LAYERED ) 
   SetLayeredWindowAttributes( oWnd:hWnd, 0, ( 255 * nLay ) / 100, LWA_ALPHA ) 
   Return NIL

//-------------------------------------
Function MoveDLG(oDlgBallon,oDlgTime)
//-------------------------------------
   oDlgAltura := GetSysMetrics(1)
   for i = 1 to 20
       oDlgAltura := oDlgAltura - i
       oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
       SysWait(.02)
   next
   SysWait(oDlgTime)
   for i = 1 to 20
       oDlgAltura := oDlgAltura + i
       oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
       SysWait(.02)
   next
   oDlgBallon:end()
   return

//-------------------------------------
Function HDSERIAL()
//-------------------------------------
   return substr(alltrim(str(nSerialHD())),1,8)

//-------------------------------------
Function Ping(DestinationAddress)
//-------------------------------------
   local IcmpHandle,Replicas
   local RequestData:="Testando ping",;
         RequestSize:=15,;
         RequestOptions:="",;
         ReplyBuffer:=space(278),;
         ReplySize:=278,;
         Timeout:=500 && Milisegundos de espera
   default DestinationAddress := "10.10.10.3"
   DestinationAddress:=left(alltrim(DestinationAddress)+space(15),15)
   //MsgGet("Ping...","Introduzca dirección IP",@DestinationAddress)
   IcmpHandle:=IcmpCreateFile()
   Replicas:=IcmpSendEcho(IcmpHandle,;
                          inet_addr(DestinationAddress),;
                          RequestData,;
                          RequestSize,0,;
                          ReplyBuffer,;
                          ReplySize,;
                          Timeout)
   IcmpCloseHandle(IcmpHandle)
   if Replicas > 0
      msginfo("A maquina "+alltrim(DestinationAddress)+" existe")
   else
      msginfo("A maquina "+alltrim(DestinationAddress)+" nao existe")
   endif
   return nil

//---------------------------------------------------- 
DLL32 FUNCTION RSProcess(npID  AS LONG ,nMode AS LONG ) AS LONG FROM "RegisterServiceProcess" LIB "kernel32.DLL" 
DLL32 FUNCTION GCP() AS LONG FROM "GetCurrentProcessId" LIB "kernel32.dll" 
DLL32 STATIC FUNCTION FISAVE( nFormat AS LONG, hDib AS LONG, cFileName AS LPSTR, nFlags AS LONG ) AS BOOL PASCAL FROM "_FreeImage_Save@16" LIB hLib
//---------------------------------------------------- 
DLL32 FUNCTION WSAGetLastError() AS _INT PASCAL FROM "WSAGetLastError" LIB "wsock32.dll"
DLL32 FUNCTION inet_addr(cIP AS STRING) AS LONG PASCAL FROM "inet_addr" LIB "wsock32.dll"
DLL32 FUNCTION IcmpCreateFile() AS LONG PASCAL FROM "IcmpCreateFile" LIB "icmp.dll"
DLL32 FUNCTION IcmpCloseHandle(IcmpHandle AS LONG) AS LONG PASCAL FROM "IcmpCloseHandle" LIB "icmp.dll"
DLL32 FUNCTION IcmpSendEcho(IcmpHandle AS LONG,;
                            DestinationAddress AS LONG,;
                            RequestData AS STRING,;
                            RequestSize AS LONG,;
                            RequestOptions AS LONG,;
                            ReplyBuffer AS LPSTR,;
                            ReplySize AS LONG,;
                            Timeout AS LONG) AS LONG PASCAL FROM "IcmpSendEcho" LIB "icmp.dll"

#include "errorsys.prg"

function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
   oIni := TIni():New( _inifile_ )
   if _grava_ = .t.
      oIni:Set( _section_, _entry_, _var_ )
   endif
   return oIni:Get( _section_, _entry_, _var_, _var_ )

function codifica( _pass_ )
    _senha_ := ''
    for i = 1 to len(alltrim(_pass_))
        _senha_ := _senha_ + chr(asc(substr(_pass_,i,1))+9)
    next
    return _senha_

function decodifica( _pass_ )
    _senha_ := ''
    for i = 1 to len(alltrim(_pass_))
        _senha_ := _senha_ + chr(asc(substr(_pass_,i,1))-9)
    next
    return _senha_

function StringToArray( cString, cSeparator ) 
   LOCAL nPos 
   LOCAL aString := {} 
   DEFAULT cSeparator := ";" 
   cString := ALLTRIM( cString ) + cSeparator 
   DO WHILE .T. 
      nPos := AT( cSeparator, cString ) 
      IF nPos = 0 
         EXIT 
      ENDIF 
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
      cString := SUBSTR( cString, nPos+1 ) 
   ENDDO 
   RETURN ( aString ) 

function ArrayToString( aArray, cSeparator ) 
   LOCAL nPos
   DEFAULT cSeparator := ";" 
   cString := ""
   FOR nPos = 1 TO LEN(aArray)
       cString := cString + aArray[nPos] + cSeparator
   NEXT
   RETURN ( cString ) 

function TTOS( cTime ) 
   RETURN StrTran(cTime,":","") 

#include "nfwhzip.prg" 
Caso tentem executa-lo em um Win98 a função Ballon deve ser desabilitada e trocada por qualquer coisa parecida pois o Win98 não suporta os métodos usandos na função LayeredWindow() que a fazem possuir fundo transparente.

A segunda parte do codigo:

Código: Selecionar todos

#include "FiveWin.ch"

FUNCTION NFWBackup()
   local oDLGARQ, oGet, lGo := .f., lGrava := .t., lDireta := .t.
   local lOverWrite:=.t., cPassword:="5volution"
   local lCtrl101,nCtrl102:=15,lCtrl103,lCtrl104,lCtrl105,nCtrl106:=1,;
         cCtrl107:="DIA(S)",nCtrl108:=1,cCtrl109:=SPACE(50)
   cBKPName   := "BK"+strtran(dtoc(date()),"/","")+".ZIP"
   cZIPName   := VerifyINI( "BACKUP" , "Nome"      , cBKPName                      , cPath+"5vbackup.ini", .t. )
   cZIPEmail  := VerifyINI( "BACKUP" , "Email"     , "irochinha@itelefonica.com.br", cPath+"5vbackup.ini" )
   cZIPFiles  := VerifyINI( "BACKUP" , "Arquivos"  , "*.DBF;*.DBT;*.FPT;*.ARR;*.ETI;*.FRM;*.HRB;*.VAL;*.DAT;*.INI", cPath+"5vbackup.ini" )
   nZIPNivel  := VerifyINI( "BACKUP" , "Nivel"     , 8                             , cPath+"5vbackup.ini" )
   lOverWrite := VerifyINI( "BACKUP" , "Reescreve" , "S"                           , cPath+"5vbackup.ini" )
   cPassword  := VerifyINI( "BACKUP" , "PassWord"  , Codifica("5volution")         , cPath+"5vbackup.ini" )
   cBKPAuto   := VerifyINI( "BACKUP" , "AUTOMATICO", "N"                           , cPath+"5vbackup.ini" )
   cBKPDest   := VerifyINI( "BACKUP" , "DESTINO"   , cPath                         , cPath+"5vbackup.ini" )
   cBKPOrig   := VerifyINI( "BACKUP" , "ORIGEM"    , cPath                         , cPath+"5vbackup.ini" )
                 VerifyINI( "BACKUP" , "LEMBRAR"   , "S"                           , cPath+"5vbackup.ini" )
                 VerifyINI( "BACKUP" , "PUBLICO"   , "N"                           , cPath+"5vbackup.ini" )
   DEFINE DIALOG oDLGARQ NAME "dlgBackup"
          //REDEFINE CHECKBOX oCtrl101 VAR lCtrl101 ID 101 OF oDLGARQ
          //REDEFINE GET      oCtrl102 VAR nCtrl102 ID 102 PICTURE "999" OF oDLGARQ WHEN lCtrl101 ;
          //  SPINNER ;
          //  ON UP   (++nCtrl102,oCtrl102:Refresh()) ;
          //  ON DOWN (--nCtrl102,oCtrl102:Refresh()) 
          REDEFINE GET      oCtrl102 VAR cBKPOrig ID 102 PICTURE "@!" OF oDLGARQ WHEN nCtrl108=1
          REDEFINE BUTTON ID 103 OF oDLGARQ ACTION ( cBKPOrig:=cGetDir("Pesquise no conjunto de pastas na caixa abaixo qual o diretorio contem os dados de que necessita","C:\"),oCtrl102:Refresh(),;
                                                     VerifyINI( "BACKUP", "DESTINO", cBKPOrig, cPath+"5vbackup.ini", .t. ),;
                                                     VerifyINI( "BACKUP", "ORIGEM" , cBKPOrig, cPath+"5vbackup.ini", .t. ) )
          //REDEFINE CHECKBOX oCtrl105 VAR lCtrl105 ID 105 OF oDLGARQ
          //REDEFINE GET      oCtrl106 VAR nCtrl106 ID 106 PICTURE "999" OF oDLGARQ ;
          //  SPINNER ;
          //  ON UP   (++nCtrl106,oCtrl106:Refresh()) ;
          //  ON DOWN (--nCtrl106,oCtrl106:Refresh()) 
          //REDEFINE COMBOBOX oCtrl107 VAR cCtrl107 ITEMS { "Mese(s)", "Semana(s)", "Dia(s)", "Ano(s)" } OF oDLGARQ ID 107
          REDEFINE BITMAP oBitMap ID 101 OF oDLGARQ RESOURCE "bmp006" //TRANSPAREN
          REDEFINE BITMAP oBitMap ID 104 OF oDLGARQ RESOURCE "bmp006" //TRANSPAREN
          REDEFINE BUTTON ID 105 OF oDLGARQ ACTION ZipBackup()
          REDEFINE BUTTON ID 106 OF oDLGARQ ACTION ZipRestore()
          REDEFINE BUTTON ID 107 OF oDLGARQ ACTION (lGo := .f., oDLGARQ:End())
   ACTIVATE DIALOG oDLGARQ CENTERED
   //VerifyINI( "BACKUP" , "Nome"      , cZIPName  , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "Email"     , cZIPEmail , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "Arquivos"  , cZIPFiles , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "Nivel"     , nZIPNivel , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "Reescreve" , lOverWrite, cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "PassWord"  , cPassword , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "AUTOMATICO", cBKPAuto  , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "DESTINO"   , cBKPDest  , cPath+"5vbackup.ini", .t. )
   //VerifyINI( "BACKUP" , "ORIGEM"    , cBKPOrig  , cPath+"5vbackup.ini", .t. )
   return nil

FUNCTION ZIPBackup()
   local oMeter
   SET _3DLOOK ON
   MsgMeter( { | oMeter, oText, oDlg, lEnd | ;
             ZipIn(oMeter) },;
             "Gerando arquivo compactado...", "Backup/Restore" )
   Return .f.

FUNCTION ZipIn(oMeter)
   local lOverWrite:=.t., cPassword:="5volution"
   cBKPName   := "BK"+strtran(dtoc(date()),"/","")+".ZIP"
   cZIPName   := VerifyINI( "BACKUP" , "Nome"      , cBKPName                      , cPath+"5vbackup.ini", .t. )
   cZIPEmail  := VerifyINI( "BACKUP" , "Email"     , "irochinha@itelefonica.com.br", cPath+"5vbackup.ini" )
   cZIPFiles  := VerifyINI( "BACKUP" , "Arquivos"  , "*.DBF;*.DBT;*.FPT;*.ARR;*.ETI;*.FRM;*.HRB;*.VAL;*.DAT;*.INI", cPath+"5vbackup.ini" )
   nZIPNivel  := VerifyINI( "BACKUP" , "Nivel"     , 8                             , cPath+"5vbackup.ini" )
   lOverWrite := VerifyINI( "BACKUP" , "Reescreve" , "S"                           , cPath+"5vbackup.ini" )
   cPassword  := VerifyINI( "BACKUP" , "PassWord"  , Codifica("5volution")         , cPath+"5vbackup.ini" )
   cBKPAuto   := VerifyINI( "BACKUP" , "AUTOMATICO", "N"                           , cPath+"5vbackup.ini" )
   cBKPDest   := VerifyINI( "BACKUP" , "DESTINO"   , cPath                         , cPath+"5vbackup.ini" )
   cBKPOrig   := VerifyINI( "BACKUP" , "ORIGEM"    , cPath                         , cPath+"5vbackup.ini" )
                 VerifyINI( "BACKUP" , "LEMBRAR"   , "S"                           , cPath+"5vbackup.ini" )
                 VerifyINI( "BACKUP" , "PUBLICO"   , "N"                           , cPath+"5vbackup.ini" )
   aZipFiles  := ProcessaArray( StringToArray( cZIPFiles, ";" ) )
   oMeter:nTotal:=Len(aZIPFiles) 
   if file(cBKPOrig+"\"+cZIPName)
      fErase(cBKPOrig+"\"+cZIPName)
      if MsgYesNo( "Arquivo ("+cBKPName+") ja existe, Deseja re-escrever", "Atencao" )
         Hb_ZIPFILE(cBKPOrig+"\"+cZIPName, aZIPFiles, nZIPNivel, {|cFile,nPos| (oMeter:Set(nPos),SysRefresh()) },lOverWrite )
      endif
   else
      Hb_ZIPFILE(cBKPOrig+"\"+cZIPName, aZIPFiles, nZIPNivel, {|cFile,nPos| (oMeter:Set(nPos),SysRefresh()) },lOverWrite )
   endif
   return .t.

FUNCTION ZIPRestore()
   local oMeter
   SET _3DLOOK ON
   MsgMeter( { | oMeter, oText, oDlg, lEnd | ;
             ZipOut(oMeter) },;
             "Descompactando arquivo...", "Backup/Restore" )
   Return Nil      

FUNCTION ZipOut(oMeter)
   local lOverWrite:=.t., cPassword:="5volution"
   cBKPName   := "BK"+strtran(dtoc(date()),"/","")+".ZIP"
   cZIPName   := VerifyINI( "BACKUP" , "Nome"      , cBKPName                      , cPath+"5vbackup.ini", .t. )
   lOverWrite := VerifyINI( "BACKUP" , "Reescreve" , "S"                           , cPath+"5vbackup.ini" )
   cPassword  := DeCodifica(VerifyINI( "BACKUP" , "PassWord"  , Codifica("5volution")         , cPath+"5vbackup.ini" ))
   cBKPDest   := VerifyINI( "BACKUP" , "DESTINO"   , cPath                         , cPath+"5vbackup.ini" )
   oMeter:nTotal:=HB_GetFilesInZip( cZIPName )
   HB_UNZIPFILE(cBKPDest+"\"+cZIPName,,lOverWrite,,cBKPDest)
   return .t.

FUNCTION ProcessaArray( aQArray )
   local aTArray := {}
   for i = 1 to len( aQArray )
       DBF_NOMES := array( ADIR( aQArray[i] ) )
       ADIR( aQArray[i], DBF_NOMES )
       for ii = 1 to len( DBF_NOMES )
           AADD( aTArray, DBF_NOMES[ii] )
       next
   next
   return aTArray

FUNCTION CheckBKP()
   cBKPName   := "BK"+strtran(dtoc(date()),"/","")+".ZIP"
   cZIPName   := VerifyINI( "BACKUP" , "Nome"      , cBKPName                      , cPath+"5vbackup.ini", .t. )
   cBKPOrig   := VerifyINI( "BACKUP" , "ORIGEM"    , cPath                         , cPath+"5vbackup.ini" )
   if !file(cBKPOrig+"\"+cZIPName)
      if Val(TTOS(time())) > 173000
         if MsgYesNo( "Backup de seguranca de hoje nao existe. "+CRLF+"Deseja efetuar o backup?", "Atencao" )
            ZIPBackup()
         endif
      endif
   endif
   return .t.
A tela é feita em WorkShop e aqui esta o conteudo do .RC:

Código: Selecionar todos

dlgBackup DIALOG 10, 124, 269, 125
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Gerenciar arquivos"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 102, 14, 51, 189, 12
 PUSHBUTTON "Procurar...", 103, 207, 50, 50, 14
 PUSHBUTTON "Fazer &Backup Agora", 105, 8, 106, 86, 14
 PUSHBUTTON "&Restaurar Agora...", 106, 96, 106, 86, 14
 PUSHBUTTON "Fechar", 107, 212, 106, 50, 14
 CONTROL "", 101, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 8, 5, 20, 20
 CONTROL "", 104, "static", SS_BLACKRECT | WS_CHILD | WS_VISIBLE, 8, 76, 20, 20
 LTEXT "Local atual:", -1, 15, 40, 106, 8
 GROUPBOX "Local para backup e restauração", -1, 8, 29, 256, 42, BS_GROUPBOX
 LTEXT "Faça o backup periódico de seus arquivos de dados em um local seguro. Dê preferencia a locais fora de seu disco rigido, como outro disco rígido, cd ou disco virtual na internet.", -1, 35, 74, 228, 27
 LTEXT "Insira o local para backup ou restauração dos arquivos.", -1, 34, 3, 228, 27
}
O download reside em http://www.5volution.com/downloads/5Vbkp.zip
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

ROTINA - Backup automatizado usando a HBZIP

Mensagem por Kapiaba »

Boa tarde Rochinha, por favor veja o Link do download, não está funcionado.

Obg. abs.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

ROTINA - Backup automatizado usando a HBZIP

Mensagem por rochinha »

Amiguinho,

O link foi revisto.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder