It looks like numberOfBytes is what controls the password, if it is >0 then the password is correct and seems to come up with -3 if incorrect.
Anyone fancy trying this out and see if they get the same?
Anyone fancy trying this out and see if they get the same?
Method ExtractFileToDisk( fileName:String, outputFileName:String, caseSensitive:Int = False, password:String="" ) Local extractedFile:TRamStream = ExtractFile ( fileName, caseSensitive, password ) Local entrySize:Int = unzGetCurrentFileSize( m_zipFile ) Local stream:TRamStream=ZipRamStream.ZCreate(entrySize,True,False) Local numberOfBytes:Int = unzReadCurrentFile ( m_zipFile, stream._buf, entrySize ) If numberOfBytes<0 Then DebugLog("Password is invalid") Else Local outFile:TStream = WriteFile ( outputFileName ) DebugLog("Password is ok") If ( outFile And extractedFile ) Then CopyStream( extractedFile, outFile ) End If CloseStream( outFile ) EndIf End Method
Framework BRL.Basic Import pub.zipengine ' Create our zipwriter object Global zrObject:ZipReader = New ZipReader Global password$="aPassword" readZip("filename") Function readZip(filename$) ' Open the zip file we just created and extract ' a file If ( zrObject.OpenZip(CurrentDir()+"/"+filename$+".zip") ) Then ' unzip information For Local i:Int=0 To zrObject.getFileCount()-1 Print("filename: "+zrObject.getFileInfo(i).zipFileName) Print("simplefilename: "+zrObject.getFileInfo(i).simpleFileName) Print("path: "+zrObject.getFileInfo(i).path) Print("orig size: "+zrObject.getFileInfo(i).header.DataDescriptor.uncompressedsize) Print("comp size: "+zrObject.getFileInfo(i).header.DataDescriptor.compressedsize) If zrObject.getFileInfo(i).header.DataDescriptor.uncompressedsize=0 'do nothing, just check for folders and files that have zero data etc... Else Local p$=zrObject.getFileInfo(i).path Local dir=ReadDir(CurrentDir()+"/"+p$) If Not dir CreateDir( CurrentDir()+"/"+p$,False ) EndIf zrObject.ExtractFileToDisk(zrObject.getFileInfo(i).simpleFileName, CurrentDir()+"/"+zrObject.getFileInfo(i).simpleFileName, False, password$) EndIf Next zrObject.CloseZip() End If End Function