marcioe Posted March 12, 2015 Report Share Posted March 12, 2015 Amigos, to precisando de uma rotina para zipar alguns arquivos de uma pasta. Por exemplo No nosso sistema tem uma pasta que quando o XML é autorizado ele grava c:\xxx\yyy\31...................000999.XML Dai ao longo do dia, eu preciso ZIPAR alguns arquivos, não é todo o conteudo da pasta Tem alguma coisa que possam demonstrar Quote Link to comment Share on other sites More sharing options...
fladimir Posted March 13, 2015 Report Share Posted March 13, 2015 tem a função abaixo: hb_ZipFile( cZip, aFiles, 9,IF(lMostraGauge, {| cFile, nPos | GaugeUpdate( aGauge, nPos / nLen )}, NIL) ,, cSenhaZip ) vamos aos parametros: cZip = Nome do Arquivo ZIP aFiles := Vetor com Arquivos (path completo) 9 = Nivel de compressao {| cFile, nPos | GaugeUpdate( aGauge, nPos / nLen )} = Bloco de codigo para atualizar 1 ProgressBar a medida q avança na conclusão da compactação cSenhaZip = Senha do Arquivo ZIP caso queira. []´s Quote Link to comment Share on other sites More sharing options...
ram_bh Posted March 13, 2015 Report Share Posted March 13, 2015 Márcio, Eu fiz uma rotina que zipa as pastas (e arquivos) usadas pela aplicação (dados, imagens, etc...) e grava em um destino a escolha do usuário. Mas, por motivo de segurança, não permiti que o usuário recupere todas as pastas zipadas... Não sei como anexar o código aqui... Alguém pode ajudar!? Se quiser, posso enviar por e-mail para você. Rodrigo Melo Belo Horizonte / MG Quote Link to comment Share on other sites More sharing options...
ram_bh Posted March 13, 2015 Report Share Posted March 13, 2015 Márcio, /*-----------------------------------------------------------*/ // Copiar e Recuperar arquivos /*-----------------------------------------------------------*/ #include "FiveWin.ch" #include "Directry.ch" Function Copiar() Local cFile, aFile := {}, aFileBkp := {} DBCloseAll() If ! MsgNoYes( "Os arquivos serão compactados e em seguida será realizada a cópia de segurança." + CRLF+CRLF+; "Se outra cópia de segurança já tiver sido realizada neste mesmo dia, os arquivos serão substituídos. Confirma?", "Copiar arquivos") If ! Abrir_DBF(cUniSer + cDirBas + "\TB_SETOR.DBF","SETOR",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf If ! Abrir_DBF(cUniSer + cDirBas + "\TB_MATER.DBF","MATER",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf If ! Abrir_DBF(cUniSer + cDirBas + "\TB_FORNE.DBF","FORNE",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf Return(Nil) EndIf // dados aFile := Directory(cUniSer + cDirBas + '\*.DBF') AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirBas + '\'+a[F_NAME])}) // imagens aFile := Directory(cUniSer + cDirImg + '\*.BMP') AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirImg + '\'+a[F_NAME])}) aFile := Directory(cUniSer + cDirImg + '\*.ICO') AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirImg + '\'+a[F_NAME])}) // executavel aFile := Directory(cUniSer + cDirApl + '\*.EXE') AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirApl + '\'+a[F_NAME])}) aFile := Directory(cUniSer + cDirApl + '\*.DLL') AEval(aFile,{|a|AAdd(aFileBkp,cUniSer + cDirApl + '\'+a[F_NAME])}) // ini aFile := Directory(GetWinDir()+'\MATERIAL.INI') AEval(aFile,{|a|AAdd(aFileBkp,GetWinDir()+a[F_NAME])}) cFile := cGetFile('Bkp_'+DTOS(Date())+'.Zip',"Escolha uma pasta para gravar a cópia de segurança",,cUniSer+cDirBkp+'\',.t.,.t.,,) If Empty(AllTrim(cFile)) If ! Abrir_DBF(cUniSer + cDirBas + "\TB_SETOR.DBF","SETOR",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf If ! Abrir_DBF(cUniSer + cDirBas + "\TB_MATER.DBF","MATER",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf If ! Abrir_DBF(cUniSer + cDirBas + "\TB_FORNE.DBF","FORNE",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf Return(Nil) EndIf Compactar(cFile,aFileBkp) If ! Abrir_DBF(cUniSer + cDirBas + "\TB_SETOR.DBF","SETOR",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf If ! Abrir_DBF(cUniSer + cDirBas + "\TB_MATER.DBF","MATER",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf If ! Abrir_DBF(cUniSer + cDirBas + "\TB_FORNE.DBF","FORNE",.t.,"DBFCDX") DBCloseAll() Return(.f.) EndIf Return(Nil) /*-----------------------------------------------------------*/ Function Compactar(cFile,aFile) Local oDlg, oMeter, oText, cMsg, nLen, lVal, nActual := 0 nLen := Len(aFile) DEFINE DIALOG oDlg FROM 01,01 TO 10,60 TITLE "Compactando arquivos..." @ 0.5,02 SAY oText VAR cMsg SIZE 180,020 OF oDlg @ 2.0,02 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 200,020 oDlg:bStart := {||lVal:=Hb_ZIPFILE(cFile, aFile, 9,{|cFile,nPos|oText:SetText('Compactando '+cFile),; nActual:=nPos/nLen*100,oMeter:Set(nActual)},.t.,Nil,.t. ),; IF(lVal,MsgInfo('Compactação completada com sucesso!'+CRLF+CRLF+; 'Arquivo compactado '+cFile,'Compactação de Arquivos'),; MsgStop('Cópia de Segurança não pode ser realizada!','Erro')),; oDlg:END()} ACTIVATE DIALOG oDlg CENTERED Return(lVal) /*-----------------------------------------------------------*/ Function Recuperar() Local cFile, aFile := {}, nFile := 0, aFDBF := {}, aFBMP := {}, aFICO := {}, aFDLL := {} If AllTrim(cUsuario) # "SUPORTE" MsgInfo( "Esta funcionalidade só deve ser executada pelo Suporte, porque os arquivos atuais serão substituídos pelos arquivos recuperados da cópia de segurança." + CRLF+CRLF +; "Certifique-se da real necessidade desta operação e procure o Suporte sempre em caso de dúvidas.","Aviso") Return(Nil) EndIf cFile := cGetFile('Bkp_*.Zip',"Escolha o arquivo da cópia de segurança a ser recuperado",,cUniSer+cDirBkp+'\',.f.,.t.,,) If Empty(AllTrim(cFile)) Return(Nil) EndIf If ! MsgNoYes( "Serão recuperados somente os arquivos de Dados, de Imagens e DLL." + CRLF+CRLF +; "Os arquivos atuais serão substituídos pelos arquivos recuperados da cópia de segurança:" + CRLF+CRLF +; "[ " + cFile + " ]" + CRLF+CRLF +; "Certifique-se da real necessidade desta operação antes de prosseguir." + CRLF+CRLF +; "Confirma?","Atenção" ) MsgInfo("Recuperação de arquivos cancelada!","Aviso") Return(Nil) EndIf aFile := Hb_GetFilesInZip(cFile) For nFile = 1 To Len(aFile) If Right(aFile[nFile],3) = "DBF" AAdd( aFDBF, aFile[nFile] ) ElseIf Right(aFile[nFile],3) = "BMP" AAdd( aFBMP, aFile[nFile] ) ElseIf Right(aFile[nFile],3) = "ICO" AAdd( aFICO, aFile[nFile] ) ElseIf Right(aFile[nFile],3) = "DLL" AAdd( aFDLL, aFile[nFile] ) EndIf Next Descompactar(cFile,aFDBF,"Dados") Descompactar(cFile,aFBMP,"Imagens BMP") Descompactar(cFile,aFICO,"Imagens ICO") Descompactar(cFile,aFDLL,"DLL") MsgRun("Organizando arquivos de Dados recuperados...","Aguarde",{||Tabelas(cUniSer,cDirBas,.t.)}) Return(Nil) /*-----------------------------------------------------------*/ Function Descompactar(cFile,aFile,cTipo) Local oDlg, nFile := 0, oText, cMsg, oMeter, nActual := 0 nFile := Len(aFile) DEFINE DIALOG oDlg FROM 01,01 TO 10,60 TITLE "Recuperando arquivos de "+cTipo+" da cópia de segurança..." @ 0.5,02 SAY oText VAR cMsg SIZE 180, 20 OF oDlg @ 2.0,02 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 200, 20 oDlg:bStart := {||lVal:=Hb_UnZipFile(cFile,{|cFile,nPos|oText:SetText('Descompactando...'+CRLF+cFile),; nActual:=nPos/nFile*100,oMeter:Set(nActual)},.t.,,cUniSer+'\',aFile ),; IF(lVal,MsgInfo('Recuperação dos arquivos de '+cTipo+' completada com sucesso'+CRLF+CRLF,'Recuperação'),; MsgStop('Arquivos de '+cTipo+' não podem ser recuperados',"Atenção")),; oDlg:END()} ACTIVATE DIALOG oDlg CENTERED Return(Nil) /*-----------------------------------------------------------*/ // fim Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 13, 2015 Report Share Posted March 13, 2015 Usando 7zip com xHarbour, muito fácil: http://fivewin.com.br/index.php?/topic/23803-contribsevenzipbinary7-zip32dll/ abs. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.