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