1. 程式人生 > >C/C++Zlib 解壓檔案

C/C++Zlib 解壓檔案

還是記下來吧,用了這麼N多次了,部落格方便點
.h標頭檔案

#include <string>
using namespace std;

class ZlibClass
{
public:
    static bool UnCompress(const string &pSzSrcFile, const string & pSzPSW, const string &pSzOutDir);
};

.cpp檔案

#include "ZlibClass.h"

#include <direct.h> //_mkdir函式的標頭檔案
#include <io.h>     //_access函式的標頭檔案
#include <windows.h> #include "zlib\unzip.h" #include "zlib\zlib.h" #include "zlib\zip.h" void FormatDirectorys(LPSTR lpszDirectorys) { if (lpszDirectorys != NULL) { int i = 0; while (lpszDirectorys[i] != ('\0')) { if (lpszDirectorys[i] == ('/')) { lpszDirectorys[i] = ('\\'
); } i++; } } } void CreateDir(const char *dir) { int m = 0, n; string str1, str2; str1 = dir; str2 = str1.substr(0, 2); str1 = str1.substr(3, str1.size()); while (m >= 0) { m = str1.find('\\'); str2 += '\\' + str1.substr(0
, m); n = _access(str2.c_str(), 0); //判斷該目錄是否存在 if (n == -1) { _mkdir(str2.c_str()); //建立目錄 } str1 = str1.substr(m + 1, str1.size()); } } bool ZlibClass::UnCompress(const string &pSzSrcFile, const string & pSzPSW, const string &pSzOutDir) { char szSrcFile[MAX_PATH] = { 0 }; char szOutDir[MAX_PATH] = { 0 }; strcpy(szSrcFile, pSzSrcFile.c_str()); strcpy(szOutDir, pSzOutDir.c_str()); char szDestFile[MAX_PATH] = (""); char szFile[50] = "0"; if (pSzSrcFile.empty() && pSzOutDir.empty()) return false; FormatDirectorys(szSrcFile); // 格式化字串 FormatDirectorys(szOutDir); // 格式化字串 unzFile uf = NULL; unz_global_info gi; unz_file_info FileInfo; uf = unzOpen(szSrcFile); int result = unzGetGlobalInfo(uf, &gi); #define BUFF_SZIE 16384 char szBuf[BUFF_SZIE] = "0"; for (int i = 0; i < gi.number_entry; ++i) { HANDLE h = NULL; if (result != UNZ_OK) return false; if (unzGetCurrentFileInfo(uf, &FileInfo, szFile, 50, NULL, 0, NULL, 0) != UNZ_OK) return false; if (!(FileInfo.external_fa & FILE_ATTRIBUTE_DIRECTORY)) //檔案,否則為目錄 { // 建立檔案 FormatDirectorys(szFile); sprintf(szDestFile, ("%s\\%s"), szOutDir, szFile); bool bCreateFile = true; if (!pSzPSW.empty()) { result = unzOpenCurrentFilePassword(uf, pSzPSW.c_str()); /* 有密碼 */ } else { result = unzOpenCurrentFile(uf); /* 無密碼 */ // 感覺有的時候,即使壓縮包有密碼,但是解壓時,不輸入密碼,也能解壓成功?Wht?是因為密碼太簡單的緣故麼?還是因為zlib破解了? } while (true) { int size = unzReadCurrentFile(uf, szBuf, BUFF_SZIE); //讀取內容 if (size >= 0) { if (bCreateFile) h = CreateFileA(szDestFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); bCreateFile = false; } if (size < 0) { if (h) { CloseHandle(h); } unzCloseCurrentFile(uf); //關閉當前檔案 return false; } if (size == 0) { break; } DWORD writ; BOOL bRes = WriteFile(h, szBuf, size, &writ, NULL); if (!bRes) { break; } } CloseHandle(h); unzCloseCurrentFile(uf); //關閉當前檔案 } else { //建立資料夾 char szDestDir[MAX_PATH] = (""); FormatDirectorys(szFile); sprintf(szDestDir, ("%s\\%s"), szOutDir, szFile); CreateDir(szDestDir); } unzGoToNextFile(uf); } return true; }

把zlib的碼放進來就okay

相關推薦

C/C++Zlib 檔案

還是記下來吧,用了這麼N多次了,部落格方便點 .h標頭檔案 #include <string> using namespace std; class ZlibClass { public: static bool UnCompres

C#壓縮或(rar和zip檔案)

為了便於檔案在網路中的傳輸和儲存,通常將檔案進行壓縮操作,常用的壓縮格式有rar、zip和7z,本文將介紹在C#中如何對這幾種型別的檔案進行壓縮和解壓,並提供一些在C#中解壓縮檔案的開源庫。 在C#.NET中壓縮解壓rar檔案 rar格式是一種具有專利檔案的壓縮格式,是一種商業壓縮格式,不開

C++ 壓縮檔案檔案

最近專案中用到檔案壓縮與解壓,就瞭解了下這類知識。都說程式設計師是程式碼的搬運工,我也不例外。很快在網上找到了一些程式碼,比如zlib庫,minizip等等。 我在codeproject上找到了一個原

C# 壓縮、資料夾或檔案(帶密碼)

今天梳理一下專案中用到的壓縮、解壓資料夾或檔案的方法,發現因為需求不同,已經用了好幾個不同元件。今天就好好整理記錄下,別下次遇到需求又重頭開始了。 #### DotNetZip DotNetZip是一個開源的免費類庫,主要提供了快速操作zip檔案的工具集,VB、C#任何.Net語言都可以通過它建立、解壓縮z

使用zlib.apk/.zip檔案(Windows&Ubuntu)

前言 前面講過,解壓出apk檔案的內容是進行apk分析的第一步,而.apk檔案其實就是.zip檔案。也就是說首先要實現zip檔案的解壓縮。本文將分別介紹在Windows和Ubuntu下如何使用zlib這一開源庫對zip檔案進行解壓。 Git Z

Zip4j檔案

使用 zip4j 可以快速對檔案進行解壓縮處理 更多精彩 更多技術部落格,請移步 asing1elife’s blog 官網 zip4j 特性 支援Zip檔案的建立、新增、解壓、更新、移除 可讀寫有密碼保護的Zip檔案

java壓縮檔案

記錄一下,公司在伺服器中,需要對檔案進行壓縮,然後給使用者下載故記錄一下: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOExc

php 檔案與壓縮檔案

配置環境變數 然後cmd 輸入 php -m 檢視是否有zip 選項 沒有的話zip功能將無法使用 function zip_file(string $filename) { if (!is_file($filename)) { return false;

ubuntu壓縮及檔案

1.壓縮zip # zip -r archive_name.zip directory_to_compress 2.tar只是打包並不壓縮,好處就是它只消耗非常少的CPU以及時間去打包檔案 # tar -cvf archive_name.tar directory_to_compress

Python使用urllib下載檔案以及使用zipfile檔案

首先定義檔案下載路徑,檔名 import os from six.moves import urllib import zipfile DATA_URL = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00240/UCI%

Unity3D打包 將釋出的exe檔案打包成一個Windows安裝檔案(自檔案

Unity打包Standalone時 會出現一個exe檔案和一個data資料夾 可是我們平常見過的軟體 基本沒有這種像這種結構的 一般都是一個安裝檔案,然後點選安裝,選擇路徑,生成快捷方式… 本篇部落格將介紹如何將Unity釋出的內容打包成一個安裝檔案 並具備選擇安裝路徑、生

linux用tar檔案Cannot open: No such file or directory

在阿里雲上搭建大資料平臺,解壓 zookeeper-3.4.10.tar.gz時報錯如下: tar: zookeeper-3.4.10: Cannot mkdir: Permission denied tar: zookeeper-3.4.10/ivysettings.xml: Can

gzip: stdin: unexpected end of file Linux檔案出錯

[[email protected] jdk1.8]# tar -zxvf jdk-8u161-linux-x64.tar.gz jdk1.8.0_161/ jdk1.8.0_161/javafx-src.zip gzip: stdin: unexpected e

Linux 檔案

Linux下的壓縮解壓縮命令詳解及例項 例項:壓縮伺服器上當前目錄的內容為xxx.zip檔案 zip -r xxx.zip ./* 解壓zip檔案到當前目錄 unzip filename.zip ============================ 另:有些伺

Mac連線Linux伺服器並上傳、檔案

       由於工作原因,要求在Linux伺服器沒網路的情況下部署專案——首先我要做的是將相關檔案上傳至伺服器。我在網上搜了很多相關資料,結合自身實際情況,整理出我所做的步驟,以供參考。 目的:Mac連線上Linux伺服器,並將檔案上傳至Linux伺服器

壓縮包解密,zip檔案解密,找回密碼,RAR破解密碼工具,壓縮包解密,檔案解密,檔案軟體RA

壓縮包解密,zip解壓檔案解密,找回密碼,RAR破解密碼工具,壓縮包解密,解壓檔案解密,檔案軟體RAR破解密碼工具免費下載。 目前我見過的最好用的,破解密碼速度最快的軟體,沒有之一,附帶教程,親測好用!!! 下載地址:https://pan.baidu.com/s/1QUwcvwGtwL4StNfSO

ubuntu之壓縮與檔案

ubuntu之壓縮與解壓檔案 安裝壓縮工具 sudo apt-get install rar 安裝解壓工具 sudo apt-get install unrar .tar 解包: tar xvf xxx.tar 打包: tar cvf xxx.tar dirname

Huffman編碼實現壓縮、檔案

Huffman編碼:根據詞頻構建Huffman樹,實現對文字的字首編碼。 1、統計文字中每個字元出現的次數,放入優先佇列中,構建一棵空的二叉樹; 2、取出頻率最小的兩個字元a、b,字元a、b的頻率分別作為此二叉樹的左右結點,左結點的編號為1,右結點的編號為0,其頻率之和(f

gunzip 和 unzip 檔案到指定的目錄

1. gz檔案 這種檔案可以使用gzip、gunzip、zcat進行解壓: gzip -d file_name gunzip -d file_name zcat file_name 2. tar.gz、tgz檔案 這種壓縮檔案使用解壓命令和tar命令配合使用,

linux 中如何檔案(比如.tar.gz 用tar)

tar -xzvf .tar.gz       tar [-cxtzjvfpPN] 檔案與目錄 ....       引數:       -c :建立一個壓縮檔案的引數指令(create 的意思);       -x :解開一個壓縮檔案的引數指令!       -t