HERGON Posted January 21, 2015 Report Share Posted January 21, 2015 Bom dia Utilizo: - HB_ZipFile() para compactar ; - HB_GetFilesInZip() para listar arquivos que estão dentro do zip. (cria uma array) Existe algum comando que me retorne os arquivos e seus respectivos tamanhos que estão em um arquivo ZIP (tamanho real do arquivo, não compactado) ? Alguém teria uma lista completa dos comandos? Agradeço antecipadamente. Herberson Gontijo Ponteware Informática Quote Link to comment Share on other sites More sharing options...
joaosolution Posted January 21, 2015 Report Share Posted January 21, 2015 Herberson Se não me engano é isso que você precisa: oZip:Listar() **************************************************************************** METHOD Listar(pcPath,pcNome) CLASS TZIP **************************************************************************** * * Gera um array com informações dos arquivos contidos em um ZIP * Parametros: pcPath,pcNome * Retorno: Array de 5 dimensões,dimensões indicadas abaixo * * ****************** * * Dimensões: * * * 1- cName * * * 2- cSize * * * 3- dDate * * * 4- cTime * * * 5- cAttributes * * ****************** * * Autor: Samir * 23/10/2008 - 09:12:40 * **************************************************************************** Local Result := {}, aZip := {}, i := 0, cUnit := "" Local j := 0, cAux := "", aLog := {}, cDiretorio Default pcPath := ::cPath, pcNome := Alltrim(::cNome) cUnit := "" //Left(pcPath,3) //-- Obtém informações dos arquivos contidos no zip aZip := HB_GETFILESINZIP(pcPath+pcNome,.T.) If Len(aZip) == 0 MsgAlert("Não encontrou arquivo para retornar!","Atenção") Return .T. Endif For i := 1 to Len(aZip) //Len(aZip) equivale a HB_GETFILECOUNT(aZip) //-- Log cAux := "" For j := 1 to 9 cAux += DetalheLog(j,aZip[i,j]) Next aAdd(aLOG,cAux) //-- Resultado( Nome, Tamanho, Data, Hora, Atributos) aAdd(Result,{cUnit+aZip[i,1],aZip[i,2],aZip[i,6],aZip[i,7],aZip[i,9]}) //aAdd(Result,{aZip[i,1],aZip[i,2],aZip[i,6],aZip[i,7],aZip[i,9]}) If i % 10 = 0 SysRefresh() Endif Next //-- Obtem o diretório para salvar o Log cDiretorio := cFilePath(GetModuleFileName(GetInstance())) //+"\Logs\" *If !IsDirectory(cDiretorio) * MakeDir(cDiretorio) *Endif //-- Salva o log SaveZipLog(cDiretorio,pcNome,aLog) HB_GCAll() Return Result Esta na classe bakcup ja disponibilizada qui no forum. Att João Bosco Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 21, 2015 Report Share Posted January 21, 2015 Veja se ajuda: Category: Zip Functions hb_GetZipComment hb_SetBuffer hb_SetDiskZip hb_SetZipComment hb_UnzipFile hb_ZipDeleteFiles hb_ZipFile hb_ZipFileByPKSpan hb_ZipFileByTDSpan hb_ZipTestPK http://www.elektrosoft.it/tutorials/Harbour-Reference-Guide/harbour-reference-guide.htm https://vszakats.github.io/harbour-core/harbour.html abs. Quote Link to comment Share on other sites More sharing options...
HERGON Posted January 21, 2015 Author Report Share Posted January 21, 2015 Boa tarde Obrigado JoãoSolution e Kapiaba por responder. Olhei no link que o Kapiaba postou mas não achei nada que pudesse me retornar o tamanho dos arquivos dentro do arquivo zipado, já a rotina do JoaoSolution está acusando a falta das funções: DetalheLog() e SaveZipLog(), se puder me enviar eu testo aqui e dou o retorno. Obrigado Herberson Gontijo Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 21, 2015 Report Share Posted January 21, 2015 Veja http://forums.fivetechsupport.com/viewtopic.php?t=4594 nSizeFilesToZip da xBlite.prg Se não tiver, peça ao Carlos Vargas ou avise. Quote Link to comment Share on other sites More sharing options...
aferra Posted January 21, 2015 Report Share Posted January 21, 2015 Aqui vc encontra o que precisa http://www.marinas-gui.org/projects/harbour_manual/ Quote Link to comment Share on other sites More sharing options...
joaosolution Posted January 21, 2015 Report Share Posted January 21, 2015 Herberson Qual e-mail para enviar os arquivos? Att João Bosco Quote Link to comment Share on other sites More sharing options...
HERGON Posted January 22, 2015 Author Report Share Posted January 22, 2015 Bom dia Obrigado a todos que responderam o post, especialmente ao JoãoSolution que me enviou a classe por email. Estudando a classe, consegui chegar no resultado desejado mesmo sem utilizá-la... Vamos à solução do problema: Quando utilizava o comando aFilesInZip:=HB_GetFilesInZip(cArqZip) o retorno é uma array unidimensional com os nomes dos arquivos zipados contidos no arquivo .zip Se utilizarmos o mesmo comando passando .t. como segundo parâmetro, o retorno será uma array multi com todos os dados dos arquivos zipados contidos no arquivo .zip, inclusive o tamanho real, que era o que eu precisava. Exemplo: aFilesInZip:=HB_GetFilesInZip(cArqZip, .t.) Solução perfeita para o que eu queria, mas se não fosse a classe que o João enviou não saberia.... Por isso, meu MUITO OBRIGADO. Herberson Gontijo Ponteware Software Ltda. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 22, 2015 Report Share Posted January 22, 2015 Olá, eu acho que no seu caso, o melhor seria usar o comando XBL_GETFULL_INFOZIP diretamente, teste e reporte. // LOCAL aFiles := hb_GetFilesInZip( cFile, XBL_GETFULL_INFOZIP ) Aproveitando, vou deixar um exemplo simples de backup para o pessoal. #include 'fivewin.ch' #define HBL_ZIPLEVEL 9 #define XBL_ZIPOVERWRITE .T. #define XBL_ZIPWITHPATH .T. #define XBL_GETFULL_INFOZIP .T. Function Main() Local oDlg, oBtn[ 3 ], oMtr, oFont, ; nProgr := 0 DEFINE FONT oFont NAME "Verdana" SIZE 0, -11 DEFINE DIALOG oDlg FROM 0, 0 TO 300, 400 PIXEL TITLE "Testing Zip functions with FWH and xHarbour" @ 10, 20 BUTTON oBtn[ 1 ] PROMPT "Zip Databases" OF oDlg SIZE 40, 15 PIXEL ACTION ZipDatabases( oMtr ) @ 30, 20 BUTTON oBtn[ 2 ] PROMPT "Exit" OF oDlg SIZE 40, 15 PIXEL ACTION oDlg:End() @129, 3 METER oMtr VAR nProgr PROMPT "Progress" OF oDlg ; FONT oFont UPDATE TOTAL 16 ; COLORS CLR_HGRAY, CLR_BLACK BARCOLOR CLR_HBLUE, CLR_YELLOW SIZE 191, 15 PIXEL ACTIVATE DIALOG oDlg CENTERED oFont:End() Return Nil Static Function ZipDatabases( oMtr ) Local nEle, aFiles, aSizes, ; nTotal := 0, ; bOnZipFile := { | cFile, nFile | nTotal += aSizes[ nFile ], oMtr:Set( nTotal ), SysRefresh() }, ; aDirectory := Directory( "*.dbf" ), ; cZipName := "Databases.zip" aFiles := {} aSizes := {} For nEle := 1 To Len( aDirectory ) AAdd( aFiles, aDirectory[ nEle, 1 ] ) AAdd( aSizes, aDirectory[ nEle, 2 ] ) nTotal += aDirectory[ nEle, 2 ] Next oMtr:nTotal := nTotal nTotal := 0 hb_ZipFile( cZipName, aFiles, HBL_ZIPLEVEL, bOnZipFile, XBL_ZIPOVERWRITE,,, XBL_ZIPWITHPATH ) Return Nil 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.