簡單一點的 直接調用系統命令
比如system("unzip ___filename___ -d target_path");
這樣做 實際就相當於在命令行下敲了這樣的一個命令
不過 這個要求系統內 必須安裝了unzip這個軟體 即支持這個命令
復雜一些的 你可以再網上找一個開源的gzip 很多很好找的 然後看懂代碼 調用對應的介面函數
這樣做的好處不需要依賴系統環境
② 求高手幫忙 c++編寫解壓 壓縮文件 代碼!加密 解密 代碼
//由於字數限制,下述代碼有刪節,如需完整代碼,請直接訪//問gdgzzch.blog.163.com
//霍夫曼樹,又稱哈夫曼數,huffman樹
//-----------------------------------------------------------------------------
//huffmantreemain.cpp
//主界面
#include "huffmantree.h"
#include <fstream.h>
#include <conio.h>
#include "compress1.h"
#include "Ceshi.h"
void menu()
{
cout<<endl;
cout<<"\t\t *** 操作菜單 ***\n\n";
cout<<"\t\t\t 1 壓縮文件\n";
cout<<"\t\t\t 2 解壓文件\n";
cout<<"\t\t\t 3 測試\n";
cout<<"\t\t\t 0 退出\n\n\n\n";
return;
}
int main()
{
char meiyong;
cout<<"\n\n\n\n\n\n\n\n\n"
<<"\t &*************** 壓縮軟體 **************&\n"
<<"\t * *\n"
<<"\t * *\n"
<<"\t * *\n\n\n"
<<"\t * 運行本軟體之前,請務必仔細閱讀使用指南 *"
<<"\n\n\n\n\n\n\n\n\n\n";
cin.unsetf(ios::skipws);
cin>>meiyong;
cin.setf(ios::skipws);
ifstream fin("使用說明.txt",ios::binary);
fin.unsetf(ios::skipws);
while(fin>>meiyong)
{
cout<<meiyong;
}
cout<<endl;
getch();
fin.setf(ios::skipws);
fin.close();
cout<<"\n\n\n\n\n\n";
cout<<"\n";
cout<<"\t\t*-------------------------------------------*\n";
cout<<"\t\t * 實驗六: 霍夫曼樹的應用 * \n";
cout<<"\t ******* *******\n";
cout<<"\t\t * 作者: gdgzzch 學號: 15201314 *\n";
cout<<"\t\t*-------------------------------------------*\n\n";
cout<<"\t\t 2005.11.16\n\n";
menu();
int choice;
cout<<"請選擇操作: ";
cin>>choice;
while(1)
{
switch(choice)
{
case 1:
Compress();
break;
case 2:
Decompress();
break;
case 3:
Ceshi();
break;
case 0:
cout<<"\n\n\t\t********* 謝謝您使用本軟體,再見! ***********\n\n\n\n";
return 1;
default:
cout<<"無此操作!\n\n";
}
cout<<endl<<"請選擇操作: ";
cin>>choice;
}
return 1;
}
//----------------------------------------------------------
//compress1.h
//壓縮
#ifndef COMPRESS
#define COMPRESS
#include "huffmantree.h"
#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
//壓縮函數
void Compress()
{
unsigned char ch;
int i,j,k;
int Charnum[256];//
unsigned char Chars[256]; //與下面共同使用 ,記錄字元
int Charnums[256]; //記錄對應字元的個數
int CharKinds; //字元種數
char filenameorg[21]; //文件名不超過20個字元 源文件名
char filenameaim[21]; //目標文件名
int fileorgsize; //源文件大小
int fileaimsize; //壓縮文件大小
HuffmanTree<unsigned char> ht;
CharNameNode NameNode[256]; //存儲字元對應的霍夫曼編碼
BinTreeNode<unsigned char> *btn=NULL;
Code *first=NULL;
Code *last=NULL;
ifstream filein;
ofstream fileout;
cout<<"請輸入你要壓縮的文件的名字:";
cin>>filenameorg;
filein.open(filenameorg,ios::nocreate|ios::binary); //open:filenameorg
if(!filein)
{
cout<<filenameorg<<" 不存在!\n";
filein.clear();
return;
}
cout<<"請輸入你的壓縮文件的名字(*.HFM):"; //以後再用
cin>>filenameaim;
char filetype[5];
int len;
len=strlen(filenameaim);
if(len<=4)
{
cout<<filenameaim<<"文件的擴展名必須為HFM\n";
return ;
}
for(i=len-1,j=3;i>=len-4;i--,j--)
filetype[j]=filenameaim[i];
filetype[4]='\0';
if(strcmp(filetype,".HFM")!=0)
{
cout<<filenameaim<<"文件的擴展名必須為HFM\n";
return ;
}
// ******************************************************
for(i=0;i<256;i++)
{
Charnum[i]=0; //記錄每一個字元的個數
Charnums[i]=0; //記錄字元Char[i]的個數
}
filein.unsetf(ios::skipws);
fileorgsize=0; //計算源文件大小
while(filein>>ch)
{
Charnum[unsigned int(ch)]++; //統計每種字元的頻數
fileorgsize++;
}
filein.setf(ios::skipws);
filein.close(); //close:filenameorg
// ******************************************************
j=0;
for(i=0;i<256;i++)
{
if(Charnum[i])
{
Chars[j]=unsigned char(i); //統計源文件中存在的字元的
Charnums[j]=Charnum[i];
j++;
}
}
CharKinds=j;
// ******************************************************
fileaimsize=0; //計算壓縮文件大小
fileout.open(filenameaim,ios::binary);
fileout<<'0'<<' '; //非法位數(之後修改)
fileout<<filenameorg<<' ';
fileout<<CharKinds<<' '; //存入字元種類
fileaimsize+=7;
for(i=0;i<CharKinds;i++)
{
fileout<<Chars[i]<<' '<<Charnums[i]<<' ';//將字元信息存入臨時文件
fileaimsize+=10;
}
ht.Build(Charnums,Chars,CharKinds,ht); //建立霍夫曼樹
i=0;
ht.Path(ht.GetRoot(),first,last,NameNode,i); //搜索霍夫曼樹求得字元對應的霍夫曼編碼
// ***********************************************************
filein.open(filenameorg,ios::nocreate|ios::binary);
filein.unsetf(ios::skipws);
k=0;
j=0;
while(filein>>ch)
{
i=0;
while(ch!=NameNode[i].charname) //找到ch
i++;
Code *p=NameNode[i].link;
while(p!=NULL)
{
j<<=1;
j+=p->code;
k++;
if(k==8)
{
fileout<<unsigned char(j);
fileaimsize++; //計算壓縮文件大小
k=0;
j=0;
}
p=p->link;
}
}
filein.setf(ios::skipws);
filein.close();
if(k<8)
{
j<<=(8-k);
fileout<<unsigned char(j);
fileaimsize++; //計算壓縮文件大小
}
fileout.seekp(0,ios::beg);
fileout<<8-k; //修改非法代碼的位數
fileout.close();
for(i=0;i<CharKinds;i++)
{
Code *q=NameNode[i].link;
Code *s=NULL;
while(q!=NULL)
{
s=q;
q=q->link;
delete s;
}
NameNode[i].link=NULL; //清除鏈表信息
}
ht.Destroy();
cout<<"文件壓縮成功!壓縮率為:"<<(fileaimsize*100)/fileorgsize<<'%'<<endl;
return;
}
void Decompress()
{
unsigned char ch;
int i,j,k;
unsigned char Chars[256]; //與下面共同使用 ,記錄字元
int Charnums[256]; //記錄對應字元的個數
int CharKinds; //字元種數
unsigned int total; //記錄字元轉化後的數
int fpend; //暫存文件指針的最後位置
char filenameorg[21]; //文件名不超過20個字元 源文件名
char filenameaim[21]; //目標文件名
HuffmanTree<unsigned char> ht;
CharNameNode NameNode[256]; //存儲字元對應的霍夫曼編碼
BinTreeNode<unsigned char> *btn=NULL;
Code *first=NULL;
Code *last=NULL;
ifstream filein;
ofstream fileout;
char filetype[5];
int len;
cout<<"請輸入你要解壓的文件的名字:";
cin>>filenameorg;
len=strlen(filenameorg);
if(len<=4)
{
cout<<filenameorg<<"不是霍夫曼編碼的程序,不能解壓!\n";
return ;
}
for(i=len-1,j=3;i>=len-4;i--,j--)
filetype[j]=filenameorg[i];
filetype[4]='\0';
if(strcmp(filetype,".HFM")!=0)
{
cout<<filenameorg<<"不是霍夫曼編碼的程序,不能解壓!\n";
return ;
}
filein.open(filenameorg,ios::nocreate|ios::binary);
if(!filein)
{
cout<<filenameorg<<" 不存在!\n";
filein.clear();
return;
}
filein.close();
/* cout<<"請輸入你解壓後的文件的名字:";
cin>>filenameaim;*/
filein.open(filenameorg,ios::nocreate|ios::binary);
if(!filein)
{
cout<<"解壓失敗,請重試!\n";
filein.clear();
return;
}
filein.seekg(0,ios::end);
fpend=filein.tellg(); //記錄文件尾的位置
filein.seekg(0,ios::beg); //恢復
filein.unsetf(ios::skipws);
filein>>k>>ch; //最後一個字元不合法的位數
filein>>filenameaim>>ch;
filein>>CharKinds>>ch;
for(i=0;i<CharKinds;i++)
filein>>Chars[i]>>ch>>Charnums[i]>>ch; //載入字元信息
ht.Build(Charnums,Chars,CharKinds,ht); //建立霍夫曼樹
btn=ht.GetRoot();
fileout.open(filenameaim,ios::binary); //以文本文件打開
if(!fileout)
{
cout<<"目標文件創建失敗,請重試!\n";
fileout.clear();
return;
}
while(filein>>ch)
{
total=(unsigned int)(ch); //這里都是正確的
j=0;
if(filein.tellg()==fpend) //到了文件尾
j=k; //留k位不輸出
for(i=7;i>=j;i--)
{
if(total&(1<<i)) //這一位是1向右子樹走
btn=btn->GetRight();
else
btn=btn->GetLeft();
// if(btn->GetData()!=0)
if(btn->GetLeft()==NULL&&btn->GetRight()==NULL)
{
fileout<<btn->GetData();
btn=ht.GetRoot();
}
}
}
fileout.close();
filein.setf(ios::skipws);
filein.close();
ht.Destroy();
cout<<"解壓成功!\n";
cout<<"保存在\""<<filenameaim<<"\"中."<<endl;
return;
}
#endif
③ 用python解壓圖片並列印代碼
import zipfile
# 傳入壓縮文件zfile.zip獲取相關信息
zip_file = zipfile.ZipFile('zfile.zip')
# 獲取壓縮文件中的內容
f_content = zip_file.namelist()
# 壓縮前的大小
f_size = zip_file.getinfo('zfile/a.txt').file_size
# 壓縮後的大小
c_size = zip_file.getinfo('zfile/a.txt').compress_size
ZipFile 對象有一個 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夾 的字元串的列表。這些字元串可以傳遞給 ZipFile 對象的 getinfo()方法,返回一個關 於特定文件的 ZipInfo 對象。ZipInfo 對象有自己的屬性,諸如表示位元組數的 file_size 和 compress_size,它們分別表示原來文件大小和壓縮後文件大小。ZipFile 對象表示 整個歸檔文件,而 ZipInfo 對象則保存該歸檔文件中每個文件的有用信息。
從 ZIP 文件中解壓縮
ZipFile 對象的 extractall()方法從 ZIP 文件中解壓縮所有文件和文件夾,放到當 前工作目錄中。
import zipfile
zip_file = zipfile.ZipFile('zfile.zip')
# 解壓
zip_extract = zip_file.extractall()
zip_extract.close()
運行這段代碼後, example.zip 的內容將被解壓縮到 C:。 或者, 你可以向 extractall()傳遞的一個文件夾名稱,它將文件解壓縮到那個文件夾,而不是當前工作 目錄。如果傳遞給 extractall()方法的文件夾不存在,它會被創建。例如,如果你用 exampleZip.extractall('C: delicious')取代處的調用,代碼就會從 example.zip 中解壓 縮文件,放到新創建的 C:delicious 文件夾中。
ZipFile 對象的 extract()方法從 ZIP 文件中解壓縮單個文件。
創建和添加到 ZIP 文件
要創建你自己的壓縮 ZIP 文件,必須以「寫模式」打開 ZipFile 對象,即傳入'w' 作為第二個參數(這類似於向 open()函數傳入'w',以寫模式打開一個文本文件)。
如果向 ZipFile 對象的 write()方法傳入一個路徑,Python 就會壓縮該路徑所指 的文件,將它加到 ZIP 文件中。write()方法的第一個參數是一個字元串,代表要添 加的文件名。第二個參數是「壓縮類型」參數,它告訴計算機使用怎樣的演算法來壓 縮文件。可以總是將這個值設置為 zipfile.ZIP_DEFLATED(這指定了 deflate 壓縮 演算法,它對各種類型的數據都很有效)。
import zipfile
zip_file = zipfile.ZipFile('new.zip','w')
# 把zfile整個目錄下所有內容,壓縮為new.zip文件
zip_file.write('zfile',compress_type=zipfile.ZIP_DEFLATED)
# 把c.txt文件壓縮成一個壓縮文件
# zip_file.write('c.txt',compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()
這段代碼將創建一個新的 ZIP 文件,名為 new.zip,它包含 spam.txt 壓縮後的內容。
要記住,就像寫入文件一樣,寫模式將擦除 ZIP 文件中所有原有的內容。如果 只是希望將文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()傳入'a'作為第二 個參數,以追加模式打開 ZIP 文件。
④ 如何用java代碼調用解壓工具去解壓.exe文件
再 windows下通過 cmd命令執行解壓縮沒問題,但是通過 java代碼去執行不能解壓是為什麼?我在開始運行中輸入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解壓成功,但是通過下面 java代碼不能實現解壓縮功能,請指點。主要代碼: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\");
再 windows下通過 cmd命令執行解壓縮沒問題,但是通過 java代碼去執行不能解壓是為什麼?我在開始運行中輸入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解壓成功,但是通過下面 java代碼不能實現解壓縮功能,請指點。主要代碼: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\");
⑤ 易語言解壓ZIP文件
添加一個ZIP壓縮組件 在擴展組件裡面,如果看不到擴展組件,就點 工具-支持庫配置-全選-確定,就能看到了
然後寫代碼:
ZIP壓縮1.解壓(「C:\1.zip」,取特定目錄(3))
⑥ BAT解壓代碼 用7Z
7z外命令可能在軟體的安裝路徑,有的時候。先set
path=7z的文件安裝路徑;%path%7z命令解壓文件的例子:解壓File.7z文件到目錄Mydir。7z
x
"d:\File.7z"
-y
-aos
-o"d:\Mydir"參數說明:x:完整路徑下解壓文件
-y:所有確認選項都默認為是(即不出現確認提示)-aos:跳過已存在的文件-o:設置輸出目錄
⑦ C#代碼如何實現解壓.Z文件啊
在C#中實現文件的壓縮和解壓縮,需要使用第三方的組建完成。常用的是:SharpZipLib組建。
1、壓縮和解壓縮有兩種典型的演算法,一種是BZIP2演算法,另一種是GZIP演算法。BZIP2能夠獲得較高的壓縮比,但是壓縮和解壓縮比較耗時,GZIP效率比較高,但是壓縮比較低。
2、BZIP2壓縮演算法的相關類,位於命名空間:ICSharpCode.SharpZipLib.BZip2中,演算法要求指定輸入流和輸出流,並指定壓縮方法使用的塊大小,一般為2048.
3、GZIP壓縮演算法的相關類,位於命名空間:ICSharpCode.SharpZipLib.GZip中,首先創建GZipOutputStream類實例,作為壓縮文件的輸出流,使用GZipOutputStream類實例的Write方法,將從源文件讀取的數據寫入輸入流。同時完成壓縮運算。
4、使用實例:
classZipAndUnzipFile
{
(){
stringsrcFile=@".... estzip.txt";//准備壓縮的文件路徑
stringzipFile=@".... estzip";//壓縮後的文件路徑
stringunzipFile=@".... estzip_unzip.txt";//解壓後的文件路徑
Console.WriteLine("使用BZIP開始壓縮文件……");
if(BZipFile(srcFile,zipFile+".bz"))//使用BZIP壓縮文件
{
Console.WriteLine("文件壓縮完成");
}
else
{
Console.WriteLine("文件壓縮失敗");
}
Console.WriteLine("使用BZIP開始解壓文件……");
if(UnBzipFile(zipFile+".bz",unzipFile))//使用BZIP解壓文件
{
Console.WriteLine("文件解壓完成");
}
else
{
Console.WriteLine("文件解壓失敗");
}
Console.WriteLine("使用GZIP開始壓縮文件……");
if(GZipFile(srcFile,zipFile+".gz"))//使用GZIP壓縮文件
{
Console.WriteLine("文件壓縮完成");
}
else
{
Console.WriteLine("文件壓縮失敗");
}
Console.WriteLine("使用GZIP開始解壓文件……");
if(UnGzipFile(zipFile+".gz",unzipFile))//使用GZIP解壓文件
{
Console.WriteLine("文件解壓完成");
}
else
{
Console.WriteLine("文件解壓失敗");
}
Console.ReadLine();
}
//使用BZIP壓縮文件的方法
staticboolBZipFile(stringsourcefilename,stringzipfilename)
{
boolblResult;//表示壓縮是否成功的返回結果
//為源文件創建文件流實例,作為壓縮方法的輸入流參數
FileStreamsrcFile=File.OpenRead(sourcefilename);
//為壓縮文件創建文件流實例,作為壓縮方法的輸出流參數
FileStreamzipFile=File.Open(zipfilename,FileMode.Create);
try
{
//以4096位元組作為一個塊的方式壓縮文件
BZip2.Compress(srcFile,zipFile,4096);
blResult=true;
}
catch(Exceptionee)
{
Console.WriteLine(ee.Message);
blResult=false;
}
srcFile.Close();//關閉源文件流
zipFile.Close();//關閉壓縮文件流
returnblResult;
}
//使用BZIP解壓文件的方法
staticboolUnBzipFile(stringzipfilename,stringunzipfilename)
{
boolblResult;//表示解壓是否成功的返回結果
//為壓縮文件創建文件流實例,作為解壓方法的輸入流參數
FileStreamzipFile=File.OpenRead(zipfilename);
//為目標文件創建文件流實例,作為解壓方法的輸出流參數
FileStreamdestFile=File.Open(unzipfilename,FileMode.Create);
try
{
BZip2.Decompress(zipFile,destFile);//解壓文件
blResult=true;
}
catch(Exceptionee)
{
Console.WriteLine(ee.Message);
blResult=false;
}
destFile.Close();//關閉目標文件流
zipFile.Close();//關閉壓縮文件流
returnblResult;
}
//使用GZIP壓縮文件的方法
staticboolGZipFile(stringsourcefilename,stringzipfilename)
{
boolblResult;//表示壓縮是否成功的返回結果
//為源文件創建讀取文件的流實例
FileStreamsrcFile=File.OpenRead(sourcefilename);
//為壓縮文件創建寫入文件的流實例,
GZipOutputStreamzipFile=newGZipOutputStream(File.Open(zipfilename,FileMode.Create));
try
{
byte[]FileData=newbyte[srcFile.Length];//創建緩沖數據
srcFile.Read(FileData,0,(int)srcFile.Length);//讀取源文件
zipFile.Write(FileData,0,FileData.Length);//寫入壓縮文件
blResult=true;
}
catch(Exceptionee)
{
Console.WriteLine(ee.Message);
blResult=false;
}
srcFile.Close();//關閉源文件
zipFile.Close();//關閉壓縮文件
returnblResult;
}
//使用GZIP解壓文件的方法
staticboolUnGzipFile(stringzipfilename,stringunzipfilename)
{
boolblResult;//表示解壓是否成功的返回結果
//創建壓縮文件的輸入流實例
GZipInputStreamzipFile=newGZipInputStream(File.OpenRead(zipfilename));
//創建目標文件的流
FileStreamdestFile=File.Open(unzipfilename,FileMode.Create);
try
{
intbuffersize=2048;//緩沖區的尺寸,一般是2048的倍數
byte[]FileData=newbyte[buffersize];//創建緩沖數據
while(buffersize>0)//一直讀取到文件末尾
{
buffersize=zipFile.Read(FileData,0,buffersize);//讀取壓縮文件數據
destFile.Write(FileData,0,buffersize);//寫入目標文件
}
blResult=true;
}
catch(Exceptionee)
{
Console.WriteLine(ee.Message);
blResult=false;
}
destFile.Close();//關閉目標文件
zipFile.Close();//關閉壓縮文件
returnblResult;
}
}
轉自:博客園《C#實現文件的壓縮和解壓縮》 --孫雅玲
⑧ 壓縮後的JS代碼怎樣解壓縮
一般壓縮都經過混淆,如果你看到變數名都是A,B,C,D之類的無規則的命名,那就是被混淆過的,一般來說也很難閱讀,就算你 還原了格式。
如果是沒有混淆的,你可以試試用js的格式化工具來重新格式化一下的,比如:
/* 美化:格式化代碼,使之容易閱讀 */
/* 凈化:去掉代碼中多餘的注釋、換行、空格等 */
/* 壓縮:將代碼壓縮為更小體積,便於傳輸 */
/* 解壓:將壓縮後的代碼轉換為人可以閱讀的格式 */
/* 混淆:將代碼的中變數名簡短化以減小體積,但可讀性差,經混淆後的代碼無法還原 */
/* 如果有用,請別忘了推薦給你的朋友: */
/* javascript在線美化、凈化、壓縮、解壓:http://tool.lu/js */
/* 以下是演示代碼 */
var Inote = {};
Inote.JSTool = function(options) {
this.options = options || {};
};
Inote.JSTool.prototype = {
_name: 'Javascript工具',
_history: {
'v1.0': ['2011-01-18', 'javascript工具上線'],
'v1.1': ['2012-03-23', '增加混淆功能'],
'v1.2': ['2012-07-21', '升級美化功能引擎'],
'v1.3': ['2014-03-01', '升級解密功能,支持eval,window.eval,window["eval"]等的解密'],
'v1.4': ['2014-08-05', '升級混淆功能引擎'],
'v1.5': ['2014-08-09', '升級js壓縮引擎'],
'v1.6': ['2015-04-11', '升級js混淆引擎']
},
options: {},
getName: function() {return this._name;},
getHistory: function() {
return this._history;}
};
var jstool = new Inote.JSTool();