/** 读取指定数目的数据 @Param 存储数据的缓冲区指针 @Param 要读取数据的大小 */ size_t FZipFileStream::Read( void* pBuf,size_t nSize ) { zzip_ssize_t ret = zzip_file_read( m_pZipFile,pBuf,nSize ); if( ret < 0 ) { ZZIP_DIR* dir = zzip_dirhandle( m_pZipFile ); // 报告错误 AString msg = zzip_strerror_of( dir ); FLOG_ERRORF("FZipFileStream::Read, An exception is found when reading zip package! (%s)", msg.c_str()); } return ret; }
//----------------------------------------------------------------------- size_t ZipDataStream::read(void* buf, size_t count) { size_t was_avail = mCache.read(buf, count); zzip_ssize_t r = 0; if (was_avail < count) { r = zzip_file_read(mZzipFile, (char*)buf + was_avail, count - was_avail); if (r<0) { ZZIP_DIR *dir = zzip_dirhandle(mZzipFile); String msg = zzip_strerror_of(dir); OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, mName+" - error from zziplib: "+msg, "ZipDataStream::read"); } mCache.cacheData((char*)buf + was_avail, (size_t)r); } return was_avail + (size_t)r; }