Jump to content
Fivewin Brasil

ROTINA PARA ZIPAR ARQUIVOS


marcioe

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...