Unzip.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:2k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. #ifndef __utils_util_h__
  2. #include "utils_util.h"
  3. #endif
  4. #ifndef _unz_H
  5. #define CASESENSITIVITYDEFAULT_NO
  6. #include "unzip.h"
  7. #endif // _unz_H
  8. namespace unzip
  9. {
  10.   
  11.     unsigned char * open(const char * filename, const char * inzipfile, unsigned int * size)
  12.     {
  13.     char filename_inzip[256];
  14.         int err=UNZ_OK;
  15.         unsigned char * buf;
  16.         unzFile uf=NULL;
  17.         char pathname[MAX_PATH];
  18.         if (utils_util::findfile(filename, MAX_PATH, pathname) == 0)
  19.             return NULL;
  20.         uf = unzOpen(pathname);
  21.         if (unzLocateFile(uf,inzipfile,0)!=UNZ_OK) //CASESENSITIVITY
  22.         {
  23.             printf("file %s not found in the %s zipfilen",inzipfile,pathname );
  24.             return NULL;
  25.         }
  26.         unz_file_info file_info;
  27.         err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
  28.     if (err!=UNZ_OK)
  29.     {
  30.     printf("error %d with zipfile in unzGetCurrentFileInfon",err);
  31.     return NULL;
  32.     }
  33.   
  34.        err = unzOpenCurrentFile(uf);
  35.     if (err!=UNZ_OK)
  36.     {
  37.     printf("error %d with zipfile in unzOpenCurrentFilen",err);
  38.             return NULL;
  39.     }
  40.         *size = file_info.uncompressed_size;
  41.         buf = new unsigned char[file_info.uncompressed_size];
  42.         unsigned int count = 0;
  43.         err = 1;
  44.         while (err > 0)
  45.         {
  46.             err = unzReadCurrentFile(uf,&buf[count],65535);
  47.         if (err<0)
  48.         {
  49.         printf("error %d with zipfile in unzReadCurrentFilen",err);
  50.                 break;
  51.         }
  52.             else
  53.                 count += err;
  54.         }
  55. //        assert(count == file_info.uncompressed_size);
  56.         if (err==UNZ_OK)
  57.         {
  58.     err = unzCloseCurrentFile (uf);
  59.     if (err!=UNZ_OK)
  60.     {
  61.     printf("error %d with zipfile in unzCloseCurrentFilen",err);
  62.     }
  63.         }
  64.         else
  65.         {
  66.             *size = 0;
  67.             delete [] buf;
  68.             buf = NULL;
  69.             unzCloseCurrentFile(uf); /* don't lose the error */       
  70.         }
  71.         return buf;
  72.     }
  73. } // namespace unzip