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