Jump to content
Fivewin Brasil

Listar arquivos de um ZIP(Resolvido, Aleluia!!)


sambomb

Recommended Posts

Olá, gostaria de saber se alguém sabe um método para listar o conteúdo de um arquivo zip, preciso saber se um arquivo já existe dentro do ZIP para requisitar uma confirmação para sobreescrever a cada arquivo que é adicionado no zip.

Utilizo: xHarbour 1.1.0 + FwXh 8.02

samirabreu@hotmail.com

Editado por - sambomb on 15/10/2008 17:06:07

Editado por - sambomb on 21/10/2008 14:18:13

Editado por - sambomb on 21/10/2008 15:35:06

Editado por - sambomb on 22/10/2008 11:37:15

Editado por - sambomb on 23/10/2008 17:44:06

Editado por - sambomb on 30/10/2008 09:54:46

Link to comment
Share on other sites

  • Replies 55
  • Created
  • Last Reply

Top Posters In This Topic

Olá, gostaria de saber se alguém sabe um método para listar o conteúdo de um arquivo zip, preciso saber se um arquivo já existe dentro do ZIP para requisitar uma confirmação para sobreescrever a cada arquivo que é adicionado no zip.

Utilizo: xHarbour 1.1.0 + FwXh 8.02

samirabreu@hotmail.com

Editado por - sambomb on 15/10/2008 17:06:07

Editado por - sambomb on 21/10/2008 14:18:13

Editado por - sambomb on 21/10/2008 15:35:06

Editado por - sambomb on 22/10/2008 11:37:15

Editado por - sambomb on 23/10/2008 17:44:06

Editado por - sambomb on 30/10/2008 09:54:46

Link to comment
Share on other sites

Ola amigo vc pode usara isto

IsZip( ) --> lYesNo ver se eh um zip correto

GetNextInZip() --> aFileInfo

com isso da pra retirar informacao do seu arquivo.zip

retorna a um array de 9 string

aFileInfo[ 1 ] // The returning code

// #define ZIP_OK 0

// #define ZIP_FILEERROR -1

// #define ZIP_INTERNALERROR -2

// #define ZIP_NOMOREITEMS 1

aFileInfo[ 2 ] // the filename

aFileInfo[ 3 ] // Date

aFileInfo[ 4 ] // Time

aFileInfo[ 5 ] // File size

aFileInfo[ 6 ] // Compressed size

aFileInfo[ 7 ] // offset insize the ZIP file

aFileInfo[ 8 ] // Pack Method

aFileInfo[ 9 ] // File attributes

com o GetFirstInZip( )

como o nome ja fiz 'first'

retorna ao nome d primeiro arquivo do zip

dados obtido no manual do fwh que fica no local

x:\fwh\manul arquivo referente testzip.prg que fica na pasta

samples do seu fwh

MSN --[ lailton.webmaster@hotmail.com ]--

FiveWin 8.5 | Xharbour 1.1.0 | BCC55 | C Pelles | Designer.LIB

Link to comment
Share on other sites

eh algo assim.. pesquisa ae

local nType := ZipType( nZipInfo )

local nSize

local cFileName

nTotalFiles := 0

nActualFile := 0

nActualSize := 0

do while .t.

nActualFile ++

if nActualFile <= nTotalFiles

cFileName := aFiles[ nActualFile ][ 1 ]

nFileSize := aFiles[ nActualFile ][ 2 ]

nActualSize := 0

oName:bGet := { || cFileName }

oMtr:Set( nActualSize )

oMtr:nTotal := 100

endif

enddo

MSN --[ lailton.webmaster@hotmail.com ]--

FiveWin 8.5 | Xharbour 1.1.0 | BCC55 | C Pelles | Designer.LIB

Link to comment
Share on other sites

coloquei de uma forma diferente...

(...)

for i := 1 to Len(paFile)

//-- Obtem as informações de dentro do ZIP

if i = 1

aResultado := GetFirstInZip(::cPath+::cNome)

else

aResultado := GetNextInZip(::cPath+::cNome)

end

//-- Verifica se está Ok

if aResultado[1] == 0

//-- Procura por arquivos iguais

if Ascan(paFile,aResultado[2])

//-- Se encontrar arquivo igual testa se o parâmetro foi indicado

if lAvisaDuplicado

//-- Se o parâmetro foi indicado pergunta se deseja sobreescrever

if SN("Arquivo já encontrado, sobreescreve")

lSobre := .T.

else

lSobre := .F.

end

else

lSobre := .T.

end//if lAvisaDuplicado

end//if Ascan(paFile,aResultado[2])

end//if aResultado[1] == 0

Result := HB_ZIPFILE(::pcPath, paFileName,0,,lSobre)

end

(...)

samirabreu@hotmail.com

Editado por - sambomb on 14/10/2008 11:44:51

Link to comment
Share on other sites

Só pra constar, o código que eu postei está errado, pois é feito enquanto adiciona um arquivo e do jeito que está ele não roda todos arquivos do ZIP e sim todos a serem adicionados o correto se encontra abaixo:

for i := 1 to Len(paFile)

//-- Obtem as informações de dentro do ZIP

For j = 1 to HB_GETUNZIPFILE(::cPath+::cNome)

//-- Verifica se é o 1º arquivo do ZIP

if j = 1

aResultado := GetFirstInZip(::cPath+::cNome)

else

aResultado := GetNextInZip(::cPath+::cNome)

end

//-- Verifica se está Ok

if aResultado[1] == 0

//-- Procura por arquivos iguais

if Ascan(paFile,aResultado[2])

//-- Se encontrar arquivo igual testa se o parâmetro foi indicado

if lAvisa

//-- Se o parâmetro foi indicado pergunta se deseja sobreescrever

if SN("Arquivo "+paFileName+" já encontrado, sobreescreve")

lSobre := .T.

else

lSobre := .F.

end

Exit //-- Se achou o arquivo sai do loop

else

lSobre := .T.

end//if lAvisa

end//if Ascan(paFile,aResultado[2])

end//if aResultado[1] == 0

end//For j = 1 to HB_GETUNZIPFILE(::cPath+::cNome)

Result := HB_ZIPFILE(::pcNome, paFileName,0,,lSobre)

if Result = .F.

Msg("Erro ao copiar o arquivo "+paFileName)

Return Result

end

end

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02

Link to comment
Share on other sites

citação:

Só pra constar, o código que eu postei está errado, pois é feito enquanto adiciona um arquivo e do jeito que está ele não roda todos arquivos do ZIP e sim todos a serem adicionados o correto se encontra abaixo:

for i := 1 to Len(paFile)

//-- Obtem as informações de dentro do ZIP

For j = 1 to HB_GETUNZIPFILE(::cPath+::cNome)

//-- Verifica se é o 1º arquivo do ZIP

if j = 1

aResultado := GetFirstInZip(::cPath+::cNome)

else

aResultado := GetNextInZip(::cPath+::cNome)

end

//-- Verifica se está Ok

if aResultado[1] == 0

//-- Procura por arquivos iguais

if Ascan(paFile,aResultado[2])

//-- Se encontrar arquivo igual testa se o parâmetro foi indicado

if lAvisa

//-- Se o parâmetro foi indicado pergunta se deseja sobreescrever

if SN("Arquivo "+paFileName+" já encontrado, sobreescreve")

lSobre := .T.

else

lSobre := .F.

end

Exit //-- Se achou o arquivo sai do loop

else

lSobre := .T.

end//if lAvisa

end//if Ascan(paFile,aResultado[2])

end//if aResultado[1] == 0

end//For j = 1 to HB_GETUNZIPFILE(::cPath+::cNome)

Result := HB_ZIPFILE(::pcNome, paFileName,0,,lSobre)

if Result = .F.

Msg("Erro ao copiar o arquivo "+paFileName)

Return Result

end

end

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02


id=quote>id=quote>

isso ae garoto fico baum

MSN --[ lailton.webmaster@hotmail.com ]--

FiveWin 8.5 | Xharbour 1.1.0 | BCC55 | C Pelles | Designer.LIB

Link to comment
Share on other sites

Agora to com problemas na compilação, da unsolved external nas seguintes funções:

IsZip

HB_GETUNZIPFILE (UnZipFile - editado)

GetFirstInZip

GetNextInZip

OBS.: Já adicionei a Lib hbzip.lib

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02

Editado por - sambomb on 15/10/2008 14:38:14

Link to comment
Share on other sites

Bem... consegui driblar a falta do zLib...

Já estou conseguindo criar o arquivo zip até achei que estava errado porque ele compacta um absurdo!

Criei 4 arquivos de texto e preenchi com caracteres aleatórios com muito CTRL+C e CTRL+V e de 176 MB antes de compactar foi para incriveis 723KBid=red>!!!

Sim KB!! Ele ficou 250x menor!!

O que leva a crer que ele usa um algoritmo para identificar redundância de informação....

Achei algumas alternativas novas(32 bits) para as funções antigas(16 bits) relacionadas a ZIP

No total são aproximadamente 20.000 caracteres, incluindo sintaxe, parâmetros, retornos e exemplos. Gostaria de saber como/quando/onde posso postar isso para que outros também possam fazer suas funções com a versão de 32 bits icon_smile_big.gif

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02

Link to comment
Share on other sites


#include 'FiveWin.ch'

#include 'Tcbrowse.ch'

//----------------------------------------------------------

Function xZip()

msginfo('Tecle algo para iniciar...')

cARQZIP='C:\TEMP\MyZipFile.ZIP'

IF FILE(cARQZIP)

FERASE(cARQZIP)

ENDIF

MSGMETER({| o | ZiparArquivos(o) },"Zipando arquivos...", "Aguarde um momento")

msginfo('Arquivo zip criado. Tecle algo para visualizar...')

aFilesInZip = hb_GetFilesInZip(cARQZIP)

aFiles={}

for x=1 to len(aFilesInZip)

cFile = cFileName(aFilesInZip[x])

cExte = cFileExt(cFile)

AADD(aFiles,{STRTRAN(cFile,'.'+cExte,''),cExte})

next

if len(aFiles)=0

AADD(aFiles,{'',''})

endif

DEFINE DIALOG oDlg title 'Arquivos contidos no ZIP '+cArqzip FROM 01,01 TO 32,70

@ 01,01 BROWSE oITEM OF oDlg SIZE 250,175

oITEM:SetArray( aFiles )

ADD COLUMN TO BROWSE oITEM DATA ARRAY ELEM 01 SIZE 200 LEFT COLOR CLR_BLACK,CLR_WHITE HEADER "Arquivo"

ADD COLUMN TO BROWSE oITEM DATA ARRAY ELEM 02 SIZE 040 CENTER COLOR CLR_BLACK,CLR_WHITE HEADER "Extensão"

@ 12,01 button 'Cancelar' of oDlg size 50,12 action oDlg:End()

ACTIVATE DIALOG oDlg CENTER

return

//----------------------------------------------------------

//----------------------------------------------------------

Function ZiparArquivos( oMeter )

local aFiles:={}, nLidos:=0, aTemp:=DIRECTORY('C:\TEMP\*.*')

for x=1 to len(aTemp)

aadd(aFiles,'C:\TEMP\'+ALLTRIM(aTemp[x,1]))

next

oMeter:nTotal = len(aFiles)

HB_ZIPFILE(cARQZIP,aFiles,,{|| nLidos++, oMeter:SET(nLidos), SysRefresh() })

RETURN

//----------------------------------------------------------

id=code>id=code>

incluir na compilação hbzip.lib (xHarbour)

abraço

Yury Marcelino Al

Viman Sistemas

vimansca@vimansca.com.br

yury030575@yahoo.com.br (msn)

skype: yury.marcelino.al

Leme / SP

FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say

Link to comment
Share on other sites

icon_smile_big.gif valeu!!

Os devidos méritos a ele icon_smile_wink.gif

Mas... o que eu queria era a sintaxe,parametros e retornos...

ja tinha baixado essa versão do XBLite e vi seu nome la por isso vim ver se vc tinha alguma documentação... algumas funções que ele usa para mim são desnecessarias e algumas não estão incluidas, como por exemplo senha... tenho as sintaxes apenas das funções:

HB_ZIPFILE() //Create a zip file

HB_UNZIPFILE() //Unzip a compressed file

HB_GETUNZIPFILE() //Gets the number of files that are in the zipfile

HB_ZIPFILEBYTDSPAN() //Create a zip file

HB_ZIPFILEBYPKSPAN() //Create a zip file on removable media

HB_SETDISKZIP() //Set an codeblock for disk changes

HB_ZIPDELETEFILES() // Delete files from an zip archive

HB_ZIPTESTPK() //Test pkSpanned zip files

HB_GETZIPCOMMENT() //Return the comment of an zip file

HB_SETZIPCOMMENT() //Set an Zip archive Comment

HB_SETBUFFER()

HB_GETUNRARFILE() //Gets the number of files that are in the RAR file

HB_UNZIPFILEINDEX() //Unzip a compressed file referenced by it number in the zipfile

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02

Editado por - sambomb on 21/10/2008 14:44:44

Link to comment
Share on other sites

citação:

icon_smile_big.gif valeu!!

Devidos méritos a ele icon_smile_wink.gif

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02


id=quote>id=quote>

Olá, veja este aqui tambem, enviado por outro amigo do forum internacional.

http://www.fivewin.com.br/exibedicas.asp?id=945

Saudações.

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

citação:

icon_smile_big.gif valeu!!

Os devidos méritos a ele icon_smile_wink.gif

Mas... o que eu queria era a sintaxe,parametros e retornos...

ja tinha baixado essa versão do XBLite e vi seu nome la por isso vim ver se vc tinha alguma documentação... algumas funções que ele usa para mim são desnecessarias e algumas não estão incluidas, como por exemplo senha... tenho as sintaxes apenas das funções:

HB_ZIPFILE() //Create a zip file

HB_UNZIPFILE() //Unzip a compressed file

HB_GETUNZIPFILE() //Gets the number of files that are in the zipfile

HB_ZIPFILEBYTDSPAN() //Create a zip file

HB_ZIPFILEBYPKSPAN() //Create a zip file on removable media

HB_SETDISKZIP() //Set an codeblock for disk changes

HB_ZIPDELETEFILES() // Delete files from an zip archive

HB_ZIPTESTPK() //Test pkSpanned zip files

HB_GETZIPCOMMENT() //Return the comment of an zip file

HB_SETZIPCOMMENT() //Set an Zip archive Comment

HB_SETBUFFER()

HB_GETUNRARFILE() //Gets the number of files that are in the RAR file

HB_UNZIPFILEINDEX() //Unzip a compressed file referenced by it number in the zipfile

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02

Editado por - sambomb on 21/10/2008 14:44:44


id=quote>id=quote>

Olá, você deve entrar no forum do XHARBOUR e perguntar diretamente ao MARCELO LOMBARDO ou say lá... kkkkkkkkkkk.

Abraços.

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

citação:

Não tem nenhuma forma de retirar essas informações da lib não?

samirabreu@hotmail.com

xHarbour 1.1.0 + FwXh 8.02


id=quote>id=quote>

NÃO TENHO CERTEZCA, MAS TALBÉZ, USANDO A TLIB.EXE

QUEM MANJA DISTO, É O SENHOR VAGNER WIRTS, EU NÃO!

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

Fone: (11) 3106-2832

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

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...