Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Structure typZipLocalFileHead ; 30 bytes
zlfhSignature.l; As Long ' 0x04034B50
zlfhVersion.w; As Integer
zlfhBitFlag.w; As Integer
zlfhCompression.w; As Integer
zlfhModFileTime.w; As Integer
zlfhModFileData.w; As Integer
zlfhCRC.l; As Long
zlfhCompressedSize.l; As Long
zlfhUncompressedSize.l; As Long
zlfhFileNameLength.w; As Integer
zlfhExtraFieldLength.w; As Integer
EndStructure
Procedure ListZipFile(Filename.s)
ReadHead.typZipLocalFileHead
FF=ReadFile(#PB_Any,Filename)
If FF
again:
ReadHead\zlfhSignature= ReadLong(ff)
If ReadHead\zlfhSignature=$4034B50
;Debug "valid Zip File!"
FileSeek(FF,Loc(ff)-4)
;Debug Loc(FF)
Laenge = ReadData(FF, @ReadHead, SizeOf(ReadHead))
;Debug Loc(FF)
With ReadHead
; Get the file name
If \zlfhFileNameLength<>0
FileString.s = Space(\zlfhFileNameLength)
;Debug Loc(FF)
Laenge = ReadData(FF, @FileString, \zlfhFileNameLength)
;Debug Loc(FF)
Debug Filestring
EndIf
Debug" Compressed=" + Str(\zlfhCompressedSize) + " UnCompressed=" + Str(\zlfhUnCompressedSize)
;Debug \zlfhExtraFieldLength
;Debug \zlfhBitFlag
; Work out how much extra Data To skip over
SeekSize = \zlfhCompressedSize
If \zlfhExtraFieldLength
SeekSize + \zlfhExtraFieldLength
EndIf
If (\zlfhBitFlag & $4)
SeekSize + 12
EndIf
;Debug Seeksize
EndWith
;Seek To Next record
Seeksize + Loc(FF)
;Debug Seeksize
FileSeek(FF,Seeksize)
; Increment file count
Filecount + 1
Goto again
Else
Debug "no more entries in ZIP"
EndIf
Debug Str(Filecount) + " in ZipFile"
CloseFile(FF)
EndIf
EndProcedure
FileName.s= "c:\B0712021_Botek_Werk3_HMI.zip"
ListZipFile(FileName)
Zuletzt geändert von Rings am 25.07.2008 14:39, insgesamt 2-mal geändert.
Rings hat geschrieben:ziert sich nich beim zitieren
Noch kein Gotoflame hier? *grinst*
Ich würd einfach mal sagen, es kommt immer auf die Situation und bei kleineren Projekten seh ich in der Regel keinen Grund, nicht doch Goto einzusetzen.
Structure typZipLocalFileHead ; 30 bytes
zlfhSignature.l; As Long ' 0x04034B50
zlfhVersion.w; As Integer
zlfhBitFlag.w; As Integer
zlfhCompression.w; As Integer
zlfhModFileTime.w; As Integer
zlfhModFileData.w; As Integer
zlfhCRC.l; As Long
zlfhCompressedSize.l; As Long
zlfhUncompressedSize.l; As Long
zlfhFileNameLength.w; As Integer
zlfhExtraFieldLength.w; As Integer
EndStructure
Procedure ListZipFile(Filename.s)
ReadHead.typZipLocalFileHead
FF=ReadFile(#PB_Any,Filename)
If FF
Repeat
ReadHead\zlfhSignature= ReadLong(ff)
If ReadHead\zlfhSignature=$4034B50
;Debug "valid Zip File!"
FileSeek(FF,Loc(ff)-4)
;Debug Loc(FF)
Laenge = ReadData(FF, @ReadHead, SizeOf(ReadHead))
;Debug Loc(FF)
With ReadHead
; Get the file name
If \zlfhFileNameLength<>0
FileString.s = Space(\zlfhFileNameLength)
;Debug Loc(FF)
Laenge = ReadData(FF, @FileString, \zlfhFileNameLength)
;Debug Loc(FF)
Debug Filestring
EndIf
Debug" Compressed=" + Str(\zlfhCompressedSize) + " UnCompressed=" + Str(\zlfhUnCompressedSize)
;Debug \zlfhExtraFieldLength
;Debug \zlfhBitFlag
; Work out how much extra Data To skip over
SeekSize = \zlfhCompressedSize
If \zlfhExtraFieldLength
SeekSize + \zlfhExtraFieldLength
EndIf
If (\zlfhBitFlag & $4)
SeekSize + 12
EndIf
;Debug Seeksize
EndWith
;Seek To Next record
Seeksize + Loc(FF)
;Debug Seeksize
FileSeek(FF,Seeksize)
; Increment file count
Filecount + 1
Else
If fileCount = 0
Debug "no valid ZIP"
EndIf
quitLoop = 1
EndIf
Until quitLoop
Debug Str(Filecount) + " in ZipFile"
CloseFile(FF)
EndIf
EndProcedure
FileName.s= "c:\meinezipdateizumtesten.zip"
ListZipFile(FileName)
Rings hat geschrieben:ziert sich nich beim zitieren