⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 miniunz.c

📁 zlib 内存压缩解压程序。。可以在内存中进行压缩解压、
💻 C
📖 第 1 页 / 共 2 页
字号:
        if ((*popt_extract_without_path)==0)            write_filename = filename_inzip;        else            write_filename = filename_withoutpath;        err = unzOpenCurrentFilePassword(uf,password);        if (err!=UNZ_OK)        {            printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err);        }        if (((*popt_overwrite)==0) && (err==UNZ_OK))        {            char rep=0;            FILE* ftestexist;            ftestexist = fopen(write_filename,"rb");            if (ftestexist!=NULL)            {                fclose(ftestexist);                do                {                    char answer[128];                    int ret;                    printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);                    ret = scanf("%1s",answer);                    if (ret != 1)                     {                       exit(EXIT_FAILURE);                    }                    rep = answer[0] ;                    if ((rep>='a') && (rep<='z'))                        rep -= 0x20;                }                while ((rep!='Y') && (rep!='N') && (rep!='A'));            }            if (rep == 'N')                skip = 1;            if (rep == 'A')                *popt_overwrite=1;        }        if ((skip==0) && (err==UNZ_OK))        {            fout=fopen(write_filename,"wb");            /* some zipfile don't contain directory alone before file */            if ((fout==NULL) && ((*popt_extract_without_path)==0) &&                                (filename_withoutpath!=(char*)filename_inzip))            {                char c=*(filename_withoutpath-1);                *(filename_withoutpath-1)='\0';                makedir(write_filename);                *(filename_withoutpath-1)=c;                fout=fopen(write_filename,"wb");            }            if (fout==NULL)            {                printf("error opening %s\n",write_filename);            }        }        if (fout!=NULL)        {            printf(" extracting: %s\n",write_filename);            do            {                err = unzReadCurrentFile(uf,buf,size_buf);                if (err<0)                {                    printf("error %d with zipfile in unzReadCurrentFile\n",err);                    break;                }                if (err>0)                    if (fwrite(buf,err,1,fout)!=1)                    {                        printf("error in writing extracted file\n");                        err=UNZ_ERRNO;                        break;                    }            }            while (err>0);            if (fout)                    fclose(fout);            if (err==0)                change_file_date(write_filename,file_info.dosDate,                                 file_info.tmu_date);        }        if (err==UNZ_OK)        {            err = unzCloseCurrentFile (uf);            if (err!=UNZ_OK)            {                printf("error %d with zipfile in unzCloseCurrentFile\n",err);            }        }        else            unzCloseCurrentFile(uf); /* don't lose the error */    }    free(buf);    return err;}int do_extract(uf,opt_extract_without_path,opt_overwrite,password)    unzFile uf;    int opt_extract_without_path;    int opt_overwrite;    const char* password;{    uLong i;    unz_global_info gi;    int err;    FILE* fout=NULL;    err = unzGetGlobalInfo (uf,&gi);    if (err!=UNZ_OK)        printf("error %d with zipfile in unzGetGlobalInfo \n",err);    for (i=0;i<gi.number_entry;i++)    {        if (do_extract_currentfile(uf,&opt_extract_without_path,                                      &opt_overwrite,                                      password) != UNZ_OK)            break;        if ((i+1)<gi.number_entry)        {            err = unzGoToNextFile(uf);            if (err!=UNZ_OK)            {                printf("error %d with zipfile in unzGoToNextFile\n",err);                break;            }        }    }    return 0;}int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)    unzFile uf;    const char* filename;    int opt_extract_without_path;    int opt_overwrite;    const char* password;{    int err = UNZ_OK;    if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)    {        printf("file %s not found in the zipfile\n",filename);        return 2;    }    if (do_extract_currentfile(uf,&opt_extract_without_path,                                      &opt_overwrite,                                      password) == UNZ_OK)        return 0;    else        return 1;}int main(argc,argv)    int argc;    char *argv[];{    const char *zipfilename=NULL;    const char *filename_to_extract=NULL;    const char *password=NULL;    char filename_try[MAXFILENAME+16] = "";    int i;    int opt_do_list=0;    int opt_do_extract=1;    int opt_do_extract_withoutpath=0;    int opt_overwrite=0;    int opt_extractdir=0;    const char *dirname=NULL;    unzFile uf=NULL;    do_banner();    if (argc==1)    {        do_help();        return 0;    }    else    {        for (i=1;i<argc;i++)        {            if ((*argv[i])=='-')            {                const char *p=argv[i]+1;                while ((*p)!='\0')                {                    char c=*(p++);;                    if ((c=='l') || (c=='L'))                        opt_do_list = 1;                    if ((c=='v') || (c=='V'))                        opt_do_list = 1;                    if ((c=='x') || (c=='X'))                        opt_do_extract = 1;                    if ((c=='e') || (c=='E'))                        opt_do_extract = opt_do_extract_withoutpath = 1;                    if ((c=='o') || (c=='O'))                        opt_overwrite=1;                    if ((c=='d') || (c=='D'))                    {                        opt_extractdir=1;                        dirname=argv[i+1];                    }                    if (((c=='p') || (c=='P')) && (i+1<argc))                    {                        password=argv[i+1];                        i++;                    }                }            }            else            {                if (zipfilename == NULL)                    zipfilename = argv[i];                else if ((filename_to_extract==NULL) && (!opt_extractdir))                        filename_to_extract = argv[i] ;            }        }    }    if (zipfilename!=NULL)    {#        ifdef USEWIN32IOAPI        zlib_filefunc_def ffunc;#        endif        strncpy(filename_try, zipfilename,MAXFILENAME-1);        /* strncpy doesnt append the trailing NULL, of the string is too long. */        filename_try[ MAXFILENAME ] = '\0';#        ifdef USEWIN32IOAPI        fill_win32_filefunc(&ffunc);        uf = unzOpen2(zipfilename,&ffunc);#        else        uf = unzOpen(zipfilename);#        endif        if (uf==NULL)        {            strcat(filename_try,".zip");#            ifdef USEWIN32IOAPI            uf = unzOpen2(filename_try,&ffunc);#            else            uf = unzOpen(filename_try);#            endif        }    }    if (uf==NULL)    {        printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename);        return 1;    }    printf("%s opened\n",filename_try);    if (opt_do_list==1)        return do_list(uf);    else if (opt_do_extract==1)    {        if (opt_extractdir && chdir(dirname))         {          printf("Error changing into %s, aborting\n", dirname);          exit(-1);        }        if (filename_to_extract == NULL)            return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password);        else            return do_extract_onefile(uf,filename_to_extract,                                      opt_do_extract_withoutpath,opt_overwrite,password);    }    unzCloseCurrentFile(uf);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -