當前位置:首頁 » 文件管理 » c壓縮文件夾

c壓縮文件夾

發布時間: 2022-10-02 04:09:46

c語言實現文件壓縮

typedef int (WINAPI ICEPUB_COMPRESSFILE)(char *strFilename, char *strZipFilename);
ICEPUB_COMPRESSFILE *icePub_compressFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_compressFile = (ICEPUB_COMPRESSFILE *)GetProcAddress(hDLLDrv, "icePub_compressFile");
}

if(icePub_compressFile)
icePub_compressFile("a.exe","a.Z");

if(hDLLDrv)
FreeLibrary(hDLLDrv);

typedef int (WINAPI ICEPUB_UNCOMPRESSFILE)(char *strZipFilename,char *strFilename);
ICEPUB_UNCOMPRESSFILE *icePub_uncompressFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_uncompressFile = (ICEPUB_UNCOMPRESSFILE *)GetProcAddress(hDLLDrv, "icePub_uncompressFile");
}

if(icePub_uncompressFile)
icePub_uncompressFile("a.Z","a.exe");

if(hDLLDrv)
FreeLibrary(hDLLDrv);

㈡ 用C語言如何對文件進行壓縮

winrar軟體安裝後,所在的安裝目錄下有個rar.exe,開一個命令窗口到該目錄下運行rar
/?就能看到用法了,在你的程序裡面調用它的相應命令行是最簡單的方法,自己編寫壓縮演算法的話,先不談效率,起碼演算法就是相當復雜的了

㈢ 如何用C語言解壓縮文件

如果你自己設計演算法,就另當別論,如果想利用第3方的演算法,我推薦用zlib,生成的壓縮包是流行的zip格式.源代碼很好找(www.zlib.net)

㈣ 有個C程序,用來批量壓縮文件夾里的文件壓縮為rar格式,出了點問題

大概看了一下,有幾個疑問:
1、rar軟體也在壓縮文件夾里嗎?因為你寫的是./rar
2、system函數的參數似乎有問題,最外面的兩個strcat是不是可以去掉了

我現在沒有環境,你可以用gdb跟一下,很容易找到問題所在的

㈤ 怎麼用c語言將.zip文件解壓成文件夾

簡單一點的 直接調用系統命令
比如system("unzip ___filename___ -d target_path");
這樣做 實際就相當於在命令行下敲了這樣的一個命令
不過 這個要求系統內 必須安裝了unzip這個軟體 即支持這個命令

復雜一些的 你可以再網上找一個開源的gzip 很多很好找的 然後看懂代碼 調用對應的介面函數
這樣做的好處不需要依賴系統環境

㈥ 我的電腦清理磁碟C壓縮舊文件夾上怎麼刪不了

這個很正常的.其實現在的硬碟空間都很大,所以磁碟清理的時候沒必要選擇壓縮舊文件.
這個並不能說你的電腦哪部分出了問題.所謂壓縮舊文件,是把一些舊文件進行壓縮,以騰挪些空間出來.不能壓縮是正常的.既不能壓縮,你在磁碟清理的選項中別選這個就是了.其實選上這個也極耗時間的.不如不選.

㈦ 如何使用winrar命令行壓縮一個文件夾,並且打開壓縮文件是直接顯示該文件夾

@echo off
"C:\Program Files\WinRAR\rar.exe" a -ep1 -R C:\Users\Administrator\Desktop\1\1.rar C:\Users\Administrator\Desktop\1
試一試。我找這個問題找了好久,最後找不到,有個同事對VB有些了解,幫忙弄的這個。
"C:\Program Files\WinRAR\rar.exe"這個是rar的路徑,也可以WinRAR a這種。
-ep1是關鍵,沒有這個就是所有文件都在一個路徑里了。
-R這個不太懂。
C:\Users\Administrator\Desktop\1\1.rar這個是指把壓縮包放在哪兒,名字為1的rar文件。C:\Users\Administrator\Desktop\1這個是指把哪個路徑的文件壓縮。具體根據實際情況自己修改,這只是我自己建的例子。如有錯誤,歡迎指正。如有幫助,點贊啥的也不要吝嗇哈。

㈧ c語言壓縮文本文件 求解答

#include"stdio.h"
#include"string.h"
#include"malloc.h"


#defineMOD_ADLER65521
#defineHASHMAX1000
#defineMAX_INT9999999//最大讀取數字為99999999
#defineCHARBUFLEN40960
#defineDECOMPRESSINITLEN1024

structstringInfo
{
intNo;//字元串出現的次序
char*str;//字元串
structstringInfo*next;//下一節點
}*strTable[HASHMAX];//用於壓縮
intisCompress;
char**strTableDe;//解壓縮表,用於解壓縮
longdeTableLen;//解壓縮表長度
longcurStrNum;//目前的字元串數量

//程序初始化
voidinit()
{
inti;
curStrNum=1;
isCompress=1;//壓縮模式,等於0時解壓縮
if(isCompress)
{
for(i=0;i<HASHMAX;i++)strTable[i]=NULL;
deTableLen=0;
strTableDe=NULL;
}
else
{
deTableLen=DECOMPRESSINITLEN;
strTableDe=(char**)malloc(deTableLen*sizeof(char*));
for(i=0;i<deTableLen;i++)strTableDe[i]=NULL;
}
}
//重新申請內存
voidReMallocDeTable()
{
deTableLen<<=1;
strTableDe=(char**)realloc(strTableDe,deTableLen*sizeof(char*));
}

//程序結束,釋放內存
voidover()
{
inti;
structstringInfo*pNext,*pDel;

for(i=0;i<HASHMAX;i++)
{
pNext=strTable[i];
while(pNext)
{
free(pNext->str);
pDel=pNext;
pNext=pNext->next;
free(pDel);
}
}
if(strTableDe)
{
for(i=0;i<curStrNum;i++)
{
//printf("%d %s ",i,strTableDe[i]);
free(strTableDe[i]);
}
free(strTableDe);
}
}

//adler32校驗和演算法
unsignedlongadler32(unsignedchar*data,size_tlen)
{
unsignedlonga=1,b=0;
size_tindex;

for(index=0;index<len;++index)
{
a=(a+data[index])%MOD_ADLER;
b=(b+a)%MOD_ADLER;
}
return(b<<16)|a;
}

//求字元串的Hash,實現快速查找,這里用的是adler32演算法,可以使用其它任何hash方法
unsignedlongHash(constchar*str)
{
returnadler32((unsignedchar*)str,strlen(str))%HASHMAX;
}

//復制新字元串
char*NewStr(constchar*str)
{
char*r=(char*)malloc(strlen(str)+1);
strcpy(r,str);
returnr;
}

//取得字元串出現的次序
intgetStrPos(constchar*str)
{
unsignedlonghash;
structstringInfo*pFirst,*pNext,*pNew;

hash=Hash(str);
pNext=pFirst=strTable[hash];
while(pNext)
{
if(strcmp(pNext->str,str)==0)returnpNext->No;
pNext=pNext->next;
}

//沒有找到匹配的字元串
pNew=(structstringInfo*)malloc(sizeof(structstringInfo));
pNew->next=NULL;
pNew->No=curStrNum++;
pNew->str=NewStr(str);
if(pFirst==NULL)strTable[hash]=pNew;
else
{
pNext=pFirst;
while(pNext->next)pNext=pNext->next;
pNext->next=pNew;
}
return-1;
}

//讀取字元串,字元串以空格為結束符
//返回負數的絕對值是讀取的是字元串長度,正數為讀取的數字
intReadStr(char*out,constchar*in)
{
char*po,*pn;
constchar*pi;
intr;

po=out;
pi=in;
while(('a'<=*pi&&*pi<='z')||('A'<=*pi&&*pi<='Z')||('0'<=*pi&&*pi<='9'))
*po++=*pi++;//只復制大小寫字母和數字
*po=0;

//試著轉化為純數字
r=0;
pn=out;
while('0'<=*pn&&*pn<='9')
{
if(r>MAX_INT)break;
r*=10;
r+=*pn++-'0';
}
if(*pn)returnout-po;//未成功轉化為數字
elsereturn(r&0x7FFFFFF)|(((po-out)&0xF)<<27);
}

voidmain()
{
charreadFileBuf[CHARBUFLEN],readStrBuf[CHARBUFLEN];
char*prfb;
intnum;
FILE*fpr,*fpw;

fpr=fopen("source.txt","r");//輸入文件
fpw=fopen("object.txt","w");//輸出文件


if(fpr==NULL||fpw==NULL)return;

init();
while(!feof(fpr))
{
if(fgets(readFileBuf,CHARBUFLEN-1,fpr)==NULL)break;
prfb=readFileBuf;
while(*prfb)
{
num=ReadStr(readStrBuf,prfb);
if(num==0)fputc(*prfb++,fpw);//沒有讀取成功
elseif(num>0)//讀入數字
{
prfb+=(num>>27)&0xF;//移動讀取的位數
if(isCompress)fprintf(fpw,"0%d",num&0x7FFFFFF);//壓縮模式寫入數字,前面添加個數字0
else
{
num&=0x7FFFFFF;
if(num==0)//如果讀到數字0
{
prfb+=1;
num=ReadStr(readStrBuf,prfb);//讀取下一格數據串
if(num>0)
{
prfb+=(num>>27)&0xF;//移動讀取的位數
fprintf(fpw,"%d",num&0x7FFFFFF);
}
elsefprintf(fpw,"0",num&0x7FFFFFF);//下一個不是數字
}
elseif(num<curStrNum)fprintf(fpw,"%s",strTableDe[num]);//解壓模式寫入字元串
else
{
printf("Error:%d,%d ",num,curStrNum);
fprintf(fpw,"%d",num);//num大於已知的字元串數量,寫入數字
}
}
}
else
{
num=-num;
prfb+=num;//移動讀取的位數
if(isCompress)
{
num=getStrPos(readStrBuf);
if(num<0)fprintf(fpw,"%s",readStrBuf);//未出現過的字元串
elsefprintf(fpw,"%d",num);//寫入位置
}
else
{
fprintf(fpw,"%s",readStrBuf);
if(curStrNum>=deTableLen)ReMallocDeTable();//解壓表長度不夠,重新申請空間
strTableDe[curStrNum++]=NewStr(readStrBuf);//加入解壓表
}
}
}
}
if(isCompress)printf("Compresssuccessful! ");
elseprintf("DecompressSuccessful! ");
over();
}

熱點內容
在系統編程 發布:2024-04-19 08:54:55 瀏覽:234
visualstudio反編譯 發布:2024-04-19 08:44:46 瀏覽:319
ise怎麼配置晶元 發布:2024-04-19 08:27:31 瀏覽:997
免費搭建在線查詢伺服器 發布:2024-04-19 08:17:28 瀏覽:46
vs資料庫實例 發布:2024-04-19 08:14:54 瀏覽:295
vfp9反編譯 發布:2024-04-19 08:11:31 瀏覽:381
火車軟卧無線密碼是多少 發布:2024-04-19 07:38:59 瀏覽:423
vb系統文件夾 發布:2024-04-19 07:29:58 瀏覽:740
qt怎麼添加文件夾 發布:2024-04-19 07:22:53 瀏覽:256
sql查詢表是否存在 發布:2024-04-19 06:11:48 瀏覽:623