コード例 #1
0
ファイル: main.cpp プロジェクト: bvdberg/code
void checkFile(ZZIP_DIR* dir, ZZIP_DIRENT* dirent, const char* filename)
{
    if (strcmp(filename, dirent->d_name) != 0) return;

    int flags = 0;
    ZZIP_FILE* f1 = zzip_file_open(dir, dirent->d_name, flags);
    if (f1 == NULL) {
        fprintf(stderr, "zzip_file_open failed: %s\n", zzip_strerror_of(dir));
        return;
    }

    // read file
    char buf[4097];
    int total = dirent->st_size;
    int bytes = 0;
    printf("---------------------\n");
    while (bytes != total) {
        zzip_ssize_t size = zzip_file_read(f1, buf, 4096);
        bytes += size;
        buf[size] = 0;
        printf("%s", buf);
        //printf("read %4d  %6d/%d\n", size, bytes, total);
    }
    printf("\n---------------------\n");

    int err = zzip_file_close(f1);
    if (err != 0) {
        fprintf(stderr, "zzip_file_close failed: %s\n", zzip_strerror_of(dir));
        return;
    }
}
コード例 #2
0
ファイル: main.cpp プロジェクト: bvdberg/code
int main(int argc, const char *argv[])
{
    if (argc < 2) {
        fprintf(stderr, "usage: %s <file>\n", argv[0]);
        return -1;
    }
    const char* innerFile = "";
    if (argc == 3) innerFile = argv[2];

    zzip_error_t errcode;
    ZZIP_DIR* dir = zzip_dir_open(argv[1], &errcode);
    if (dir == NULL) {
        fprintf(stderr, "zzip_operdir failed: %s\n", zzip_strerror(errcode));
        return -1;
    }

    // scan files
    ZZIP_DIRENT* dirent = zzip_readdir(dir);
    while (dirent) {
        printf("%s, compression %d, size %d/%d\n",
            dirent->d_name, dirent->d_compr, dirent->d_csize, dirent->st_size);

        checkFile(dir, dirent, innerFile);
        dirent = zzip_readdir(dir);
    }

    int err = zzip_closedir(dir);
    if (err != 0) {
        fprintf(stderr, "zzip_closedir failed: %s\n", zzip_strerror_of(dir));
        return -1;
    }

    return 0;
}
コード例 #3
0
/** 读取指定数目的数据
@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;
}
コード例 #4
0
ファイル: OgreZip.cpp プロジェクト: wjwwood/ogre
 //-----------------------------------------------------------------------
 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;
 }