当前位置: 代码迷 >> 综合 >> Zlib 简单的使用
  详细解决方案

Zlib 简单的使用

热度:21   发布时间:2023-12-12 05:49:24.0

Zlib

 

Zlib是一個跨平台的壓縮函數庫,提供了一套 in-memory 壓縮和解壓函數,並能檢測解壓出來的數據的完整性(integrity)。關于zlib的更多信息請訪問 http://www.zlib.net

 

http://www.chinaaspx.com/archive/develop/11324.htm 上有一篇簡單地使用Zlib的文章。

 

上面那篇文章只是講解了簡單的對一些字符串的壓縮和解壓功能,而我下面將講解一下如何如何將字符傳保存在壓縮文件裡;如何從壓縮文件中讀出字符串,這些代碼來自于zlib自帶的例程中。

 

在項目設置中添加zlib的庫文件,然後在程序中添加下面的頭文件。

 

#include <zlib.h>

 

在程序開始前,設置下面變量:

 

    static const char* myVersion=ZLIB_VERSION;

    const char *hello="hello,the world!";

    Byte uncompr[17];

    int uncomprLen=17;

   

    int len=strlen(hello);

    int err;

    gzFile file;

    z_off_t pos;                                                 

 

第一變量是zlib的版本號;hello為我們寫入文件的數據。

 

檢查我們所使用的zlib

 

  if(zlibVersion()[0]!=myVersion[0])

    {

     fprintf(stderr,"不相容的zlib版本n");

    }

    else if(strcmp(zlibVersion(),ZLIB_VERSION)!=0)

    {

      fprintf(stderr,"警告:不同的zlib版本n");

    }

 

將字符串寫入到hello.gz的壓縮文件中。

 

   file=gzopen("hello.gz","rb");

    if(file==NULL)

    {

     fprintf(stderr,"gz文件不能打開。n");

    }

   

    file = gzopen("hello.gz", "wb");

    if (file == NULL) {

         fprintf(stderr, "gzopen errorn");

         exit(1);

     }

    if (gzprintf(file, "%s",hello) != 16) {

         fprintf(stderr, "gzprintf err: %sn", gzerror(file, &err));

         exit(1);

     }

    gzclose(file);

 

hello.gz中讀去數據。

 

    strcpy((char*)uncompr,"garbage");

   

    uncomprLen=gzread(file,uncompr,(unsigned)uncomprLen);

   

    if(uncomprLen!=len)

    {

     fprintf(stderr,"gz文件讀出錯誤:%sn",gzerror(file,&err));

     printf("%d,%d",uncomprLen,len);

    

     getch();

     exit(1);

    }

   

    if(strcmp((char*)uncompr,hello))

    {

     fprintf(stderr,"讀出錯誤的數據:%sn",(char*)uncompr);

     getch();

     exit(1);

    }

    else

    {

     printf("讀出的數據:%sn",(char *)uncompr);

    }

 

    gzclose(file);     

  相关解决方案