Désarchiver ZIP 100% PB (listage et debut decompression)
Publié : mer. 28/oct./2009 23:09
Bonjour tout le monde,
Je vous présente un nouveau test de conversion d’un programme en purebasic. Ce code permet de faire la liste des fichiers d’un fichier ZIP.
Pour le moment c’est en phase de développement et j’ai fait le test sur windows xp et mac leopard et cela fonctionne parfaitement. Vous pouvez testé et me dire si cela fonctionne bien aussi pour vous.
Par la suite si cela fonctionne comme je le veux j'en ferais une DLL, car perso j'ai besoin d'un désarchiver compatible Windows, Linux et Mac. Vous pouvez laisse un commentaire pour me dire si cela interresse quelqu'un ou pas, pour savoir si je met a jour ou pas.
Cordialement,
GallyHC
Je vous présente un nouveau test de conversion d’un programme en purebasic. Ce code permet de faire la liste des fichiers d’un fichier ZIP.
Pour le moment c’est en phase de développement et j’ai fait le test sur windows xp et mac leopard et cela fonctionne parfaitement. Vous pouvez testé et me dire si cela fonctionne bien aussi pour vous.
Code : Tout sélectionner
; +======================================================+
; | GESTION DES FICHERS ZIP (Réalisation par KoakDesign) |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2009, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | VER & REV | 0.0.1 |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.30 (MODULE) |
; +--------------+---------------------------------------+
; | Program name | fls_zipfile_all.pbi |
; +======================================================+
; +======================================================+
; | Original Version: 0.0.1 |
; +--------------+---------------------------------------+
; | Created by | GallyHomeCorp |
; | Graphix by | |
; +--------------+---------------------------------------+
; | Comments: | |
; +--------------+ |
; | |
; | |
; | |
; +======================================================+
; +======================================================+
; | Système d'Exploitation |
; +--------------+---------------------------------------+
; | Window | Oui |
; | Linux | Oui |
; | MacOS | Oui |
; +======================================================+
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
EnableExplicit
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
;- DECLARATION DES PROCEDURES.
Declare.b setOpenZipFile(filename.s)
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES.
Global szipcomment.s
Global Dim sfilezip.s(0)
#READZIP = 0
#LOCSIG = $4034B50
#CENSIG = $2014B50
#ENDSIG = $6054B50
#EXTLOCSIG = $8074B50
Structure ZIPFileHeader
Signature.l
Version.w
GenePurpFlag.w
Methode.i
LastFileTime.w
LastFileData.w
Crc32.l
SizeComp.l
SizeUnComp.l
FileNameLen.w
ExtraLen.i
EndStructure
Structure ZIPCentralDirHeader
Signature.l
NbOfDiskInDir.w
NbOfDiskIn.w
TotalInDiskDir.w
TotalInDisk.w
SizeOfDir.l
OffsetOfDir.l
CommentLength.w
EndStructure
Structure ZIPCentralFileHeader
Signature.l
MadeByVer.w
ExtractVer.w
GenePurpFlag.w
Methode.w
LastFileTime.w
LastFileDate.w
Crc32.l
SizeComp.l
SizeUnComp.l
FileNameLen.w
ExtraLen.w
CommentLen.w
DiskNumStart.w
InternalAttr.w
ExtrernalAttr.l
DataOffset.l
EndStructure
Structure CodesType
Lenght.i
Code.l
EndStructure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
;-
Procedure.s DosTimeToDate(vnDate.l, vnTime.l)
;
Define nYear.l
Define nMonth.l
Define nDay.l
Define nHour.l
Define nMinute.l
Define nSecond.l
vnDate = vnDate & $FFFF
vnTime = vnTime & $FFFF
nYear = 1980 + vnDate / 512
nMonth = (vnDate / 32) % 16
nDay = vnDate % 32
nHour = vnTime / 2048
nMinute = (vnTime / 32) % 64
nSecond = (vnTime % 32) * 2
ProcedureReturn FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", Date(nYear,nMonth,nDay,nHour,nMinute,nSecond))
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.b setOpenZipFile(filename.s)
;
Define i.l
Define j.l
Define temp.l
Define lfllen.l
Define zipok.b
Define result.l
Define mExtra.s
Define mFileName.s
Define *temp.l
Define *temp1.l
Protected LOCHdr.ZIPFileHeader
Protected ENDHdr.ZIPCentralDirHeader
Protected CENHdr.ZIPCentralFileHeader
If ReadFile(#READZIP, filename)
lfllen = Lof(#READZIP)
ReadData(#READZIP, LOCHdr, SizeOf(ZIPFileHeader))
If LOCHdr\Signature = #LOCSIG
For i = (lfllen - 20) To 1 Step -1
FileSeek(#READZIP, i)
*temp = AllocateMemory(SizeOf(i))
ReadData(#READZIP, *temp, SizeOf(i))
If PeekI(*temp) = #ENDSIG
FileSeek(#READZIP, i)
ReadData(#READZIP, ENDHdr, SizeOf(ZIPCentralDirHeader))
If ENDHdr\CommentLength > 0
*temp = ReAllocateMemory(*temp,SizeOf(ZIPCentralDirHeader))
ReadData(#READZIP, *temp, ENDHdr\CommentLength)
szipcomment = Space(ENDHdr\CommentLength)
szipcomment = PeekS(*temp)
EndIf
ZipOk = #True
Break
EndIf
Next
EndIf
If ZipOk = #True
Debug szipcomment
Debug ""
ReDim sfilezip(i)
For j = 1 To ENDHdr\TotalInDisk
i = i - 36
ReDim sfilezip(j)
For i = i To 1 Step -1
FileSeek(#READZIP, i)
ReadData(#READZIP, *temp, SizeOf(i))
If PeekI(*temp) = #CENSIG
FileSeek(#READZIP, i)
ReadData(#READZIP, CENHdr, SizeOf(ZIPCentralFileHeader))
FileSeek(#READZIP, i+46)
ReadData(#READZIP, *temp, CENHdr\FileNameLen)
mFileName = Mid(PeekS(*temp),0,CENHdr\FileNameLen)
sfilezip(j) = mFileName + " - " + DosTimeToDate(CENHdr\LastFileDate, CENHdr\LastFileTime)
Debug sfilezip(j) + " - Rate: " + Str(((CENHdr\SizeUnComp-CENHdr\SizeComp)*100)/CENHdr\SizeUnComp) + "%"
Break
EndIf
Next i
Next j
EndIf
CloseFile(#READZIP)
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
setOpenZipFile("01.zip")
Cordialement,
GallyHC