Ⅰ 電腦解壓縮文件失敗的解決方法有哪些
像winrar,好壓等等軟體都有修復壓縮文件的功能,如圖,可以按照提示嘗試修復看看的,這也是最簡單的辦法了,如果不行就麻煩了!
2
示範一下winrar的修復功能,右擊選擇winrar打開,當然如果你系統默認是winrar的話可以直接雙擊打開
3
在裡面會顯示壓縮文件裡面的文件,或者是一個文件夾,在右擊文件在右鍵菜單裡面找到修復功能,如圖,不過只是支持修復rar和zip文件。。。
4
簡單的操作一下就可以試試修復了,rar和zip看文件的擴展名就可以了
進入你設定的修復文件的存放目錄,你會發現該目錄下增加了一個名為_reconst.rar或_reconst.zip的壓縮文件,它就是好壓為你修復好的文件。試著對它進行解壓縮,如果一切正常,那麼恭喜你,你的受損的壓縮文件
Ⅱ 怎麼樣用c語言編寫文法壓縮用加標記法實現
基本方法是
從識別符號向終結符過度時,從含有識別符號的規則入手,尋找所有規則中左部為識別符號的規則,然後搜索這些找到的規則的右部是否含有非終結符,若含有則從所有規則中找出左部為這個非終結符的規則,並標記,當搜完第一次後,循環查找具有標記的規則,按照上面的方式繼續標記剩下的規則,直到沒有新的規則被標記 退出 刪除未標記的規則體
反方向同理……
說什麼都不如看代碼 下面是我寫文法壓縮時候寫的壓縮函數
void Mylist::condense(char spot,CString gettofun)
{
//condense with spot way
addsignal(spot,1);
for(int i=1;i<7;i++)
{
for(int j=0;j<count;j++)
{
if(readsignal(j)==i)
{
int rightlength=findright(j).GetLength();
for(int k=0;k<rightlength;k++)
{
if(gettofun.Find(findright(j).GetAt(k))!=-1)
{
addsignal(findright(j).GetAt(k),i+1);
}
}
}
}
}
// unsigned the wordrule like s::=s*
bool caiding=false;
for(int j=0;j<count;j++)
{
int rightlength=findright(j).GetLength();
for(int k=0;k<rightlength;k++)
{
if(findleft(j)!=findright(j).GetAt(k))
caiding=true;
}
if(caiding==false)
{signal(j,0);}
}
//format every node have been signed
for(int m=0;m<count;m++)
{
if(readsignal(m)!=0)
{
signal(m,1);
}
}
//decide which to begin
for(m=0;m<count;m++)
{
if((gettofun.FindOneOf(findright(m))==-1)&&(readsignal(m)!=0))
{
signal(m,2);
}
}
//right way condense
int q=2;
for(int worry=0;worry<10;worry++){
for(int j1=0;j1<count;j1++)
{
if(readsignal(j1)==q)
{
for(int i1=0;i1<count;i1++){
//int right=findright(i1).GetLength();
for(int i2=0;i2<findright(i1).GetLength();i2++)
{
if(findleft(j1)==findright(i1).GetAt(i2))
{
signal(i1,q);
}
}
}
}
}//^
}
}
這里說明一下
其中的findright(int i) 函數的功能是從第i條文法規則中找到它的右部 返回值為CString類型
signal(int i,int j)函數 是在第i條規則中找到它的標志位(即加標記)並把j放入這個標志位 以示本條規則已經做好了標記
addsignal(char i,int j) 則是找到左部名為i的規則,並標記他的標志位為j addsignalright同理
本函數傳遞進來的有兩個參數 其中spot是識別符號Z,CString類型的是終結符號隊列,包含所有已知的終結符號
在說明一點 wordrule是一個文法體class的對象 它是一個鏈表 每一個結點(node)為一個規則:
class node
{
public:
char leftwords;
int signal;
CString rightwords;
node *next;
public:
node(char,CString);
virtual ~node();
};
希望對你有所幫助
Ⅲ 一個編譯原理的問題
First(α) 是符號串α的開始符號集合。
也就是說,用推導的方法對α進行推導,一次次地使用產生式,用產生式右部的符號串替換一個非終結符,所有那些可能出現在第一個符號位置的終結符,就構成了開始符號集。
比如,在C語言中,對於符號串「語句」來說,標識符(賦值語句)、if(條件語句)、printf(輸出函數)這些單詞(終結符)都是它開始符號集合中的元素,而+(加號)、}(右花括弧)不可能出現在「語句」的開頭,所以不是它的開始符號集合中的元素。
Follow(A)是非終結符A的後跟符號集合。
它是指在所有可能的句型中,一切可能出現在非終結符A後面的一個終結符。
這里要特別注意是在「句型」中。
你可以自己舉例,比如分析一下C語言中「表達式」後面可能跟哪些單詞,它們就是非終結符「表達式」後跟符號集合中的元素。
你說的這兩個集合的交集問題不存在。
因為它們針對的是不同類型的對象(一個是符號串,另一個是某個非終結符)。
實際上,在選擇集合問題中,考慮的不是它們的交集,而是一個產生式右部符號串的First集跟這個產生式左端非終結符的Follow集的並集。
考慮交集的,發生在相同左部的不同產生式的選擇集合之間。
Ⅳ 壓縮文件無法解壓的問題
CRC是校驗文件,經常在與壓縮和解壓相關的文件或軟體中.任何文件損壞之後,都應該從其它渠道獲得未損壞的相同文件來來替換已經損壞的文件.
判斷出錯原因
出錯信息為「CRC失敗於加密文件(口令錯誤?)」(RAR壓縮包設了密碼,但密碼輸入錯誤或是密碼輸入正確但循環冗餘校驗碼(CRC)出錯!只不過因為此RAR壓縮包加了密碼的緣故,所以WRAR才猜測說可能是「口令錯誤」)
區分上面兩種錯誤的方法:如果密碼輸入錯誤的話是無法解壓出任何文件的!但如果壓縮包內有多個文件,且有一部分文件解壓縮出來了,那麼應該是RAR壓縮包循環冗餘校驗碼(CRC)出錯而不是密碼輸入錯誤。
循環冗餘校驗碼(CRC)出錯,這是最常見的情況,這也是本文討論的重點!和上面的幾種解壓縮出錯不同,這種情況是和RAR壓縮包損壞有關的。
原因有幾種:
(1)網路傳輸狀況不好(如斷線過多,開的線程過多,伺服器人太多導致不能連接太多等)導致下載下來的文件損壞!
(2)站點提供的的RAR壓縮包本來就是損壞的(這就沒辦法了,除非此壓縮包中含有回復記錄)。
(3)所使用的下載工具不夠完善,比如有的下載工具多開了幾個線程後,下載的收尾工作很慢,有些時候下載到99%時數據就不再傳輸了,一定要人工操作才能結束(先停止下載接著再開始)。筆者就碰到過好幾次這樣的情況。結果是文件下載下來以後解壓縮到快結束時CRC出錯。
應急解決
1.利用恢復記錄
想要修復CRC是有條件的,必須是此RAR壓縮包中有恢復記錄,而此恢復記錄是RAR壓縮包被壓縮時的可選項。
而WinRAR壓縮時默認是不放置恢復記錄的,如果提供的是這樣的RAR壓縮包,那麼用戶自己想要修復CRC錯誤是不可能的。
2.釜底抽薪
如果RAR壓縮包中的文件是那種即使文件有缺失仍能正常或較為正常地使用的(其實大多數的文件對部分數據損壞都不是非常敏感的),那便可以使出我們的終極殺招:釜底抽薪法!
其原理就是讓RAR壓縮包內損壞的文件解壓縮出來,不理會WinRAR的警告,能解壓多少就解壓多少。解壓縮軟體還是用WinRAR,不過要做小小的設置。
在右鍵點擊解壓縮文件後跳出的窗口裡,把「保留被損壞的文件」復選框選中,點擊確定開始解壓縮。不要理會解壓縮出錯的信息,解壓縮結束之後你會發現損壞的文件被解壓出來了。經過這樣解壓出來的損壞文件能正常使用的幾率還是非常高的。
做好保險工作
1.做好恢復記錄
原始RAR壓縮包在壓縮時,如果選擇放置恢復記錄,這樣用戶下載後即使CRC出錯也有自己修復的機會!
2.採取分卷壓縮
採取分卷壓縮的方法便可較大地減少因為出現不可恢復的錯誤帶來的損失。
3.老文件也加恢復記錄
有人也許會問,新壓縮的RAR壓縮包可以加入恢復記錄,那麼已經壓縮過的RAR包有沒有辦法也加上恢復記錄呢?給已經壓縮好的RAR壓縮包加上恢復紀錄是有辦法的。
只需要打開壓縮包,在「命令」菜單中選擇「保護檔案文件」即可。
小常識:
其實RAR壓縮包出錯的解決方法主要是以預防為主!如果沒有預防,等到真正出了問題,技術上也是沒辦法完美解決的!像循環冗餘校驗碼(CRC)出錯這種情況,如果RAR壓縮包不包含恢復記錄的話,用戶自己想要修復CRC是不可能的!本文的主要目的是想告訴大家一些出錯的原因以及討論一些從根本上預防出錯和把損失減少到最小的辦法而已!
Ⅳ 如何編程壓縮文件,就是可以把文件壓的很小的那種方法
軟體打包工具,可以不用代碼編程
Ⅵ 關於編譯原理
可以自己寫一個JPanel或者JComponent的子類,然後在子類中重寫paint方法,在裡面繪制背景圖片。下面的部分是從我的代碼里截出來的,不保證這樣能用,只是給你個大體的絲路。學會了這個後自己重寫組件就方便多了 public class ChessBoard extends JComponent{ private Image screen = null; public void paint(Graphics g) { if (screen != null) { g.drawImage(screen, (width - BOARDWIDTH) / 2, (height - BOARDHEIGHT) / 2, this); } else { screen = ChessBoard.this.createImage(BOARDWIDTH,BOARDHEIGHT); } } }
Ⅶ (20分)用C語言編譯的文件壓縮解壓縮程序
是用霍夫曼樹做的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
struct head
{
unsigned char b; /*the charactor*/
long count; /*the frequency*/
long parent,lch,rch; /*make a tree*/
char bits[256]; /*the haffuman code*/
}
header[512],tmp;
void compress()
{
char filename[255],outputfile[255],buf[512];
unsigned char c;
long i,j,m,n,f;
long min1,pt1,flength;
FILE *ifp,*ofp;
printf("source filename:");
gets(filename);
ifp=fopen(filename,"rb");
if(ifp==NULL)
{
printf("source file open error!\n");
return;
}
printf("destination filename:");
gets(outputfile);
ofp=fopen(outputfile,"wb");
if(ofp==NULL)
{
printf("destination file open error!\n");
return;
}
flength=0;
while(!feof(ifp))
{
fread(&c,1,1,ifp);
header[c].count++;
flength++;
}
flength--;
header[c].count--;
for(i=0;i<512;i++)
{
if(header[i].count!=0) header[i].b=(unsigned char)i;
else header[i].b=0;
header[i].parent=-1;
header[i].lch=header[i].rch=-1;
}
for(i=0;i<256;i++)
{
for(j=i+1;j<256;j++)
{
if(header[i].count<header[j].count)
{
tmp=header[i];
header[i]=header[j];
header[j]=tmp;
}
}
}
for(i=0;i<256;i++) if(header[i].count==0) break;
n=i;
m=2*n-1;
for(i=n;i<m;i++)
{
min1=999999999;
for(j=0;j<i;j++)
{
if(header[j].parent!=-1) continue;
if(min1>header[j].count)
{
pt1=j;
min1=header[j].count;
continue;
}
}
header[i].count=header[pt1].count;
header[pt1].parent=i;
header[i].lch=pt1;
min1=999999999;
for(j=0;j<i;j++)
{
if(header[j].parent!=-1) continue;
if(min1>header[j].count)
{
pt1=j;
min1=header[j].count;
continue;
}
}
header[i].count+=header[pt1].count;
header[i].rch=pt1;
header[pt1].parent=i;
}
for(i=0;i<n;i++)
{
f=i;
header[i].bits[0]=0;
while(header[f].parent!=-1)
{
j=f;
f=header[f].parent;
if(header[f].lch==j)
{
j=strlen(header[i].bits);
memmove(header[i].bits+1,header[i].bits,j+1);
header[i].bits[0]='0';
}
else
{
j=strlen(header[i].bits);
memmove(header[i].bits+1,header[i].bits,j+1);
header[i].bits[0]='1';
}
}
}
fseek(ifp,0,SEEK_SET);
fwrite(&flength,sizeof(int),1,ofp);
fseek(ofp,8,SEEK_SET);
buf[0]=0;
f=0;
pt1=8;
while(!feof(ifp))
{
c=fgetc(ifp);
f++;
for(i=0;i<n;i++)
{
if(c==header[i].b) break;
}
strcat(buf,header[i].bits);
j=strlen(buf);
c=0;
while(j>=8)
{
for(i=0;i<8;i++)
{
if(buf[i]=='1') c=(c<<1)|1;
else c=c<<1;
}
fwrite(&c,1,1,ofp);
pt1++;
strcpy(buf,buf+8);
j=strlen(buf);
}
if(f==flength) break;
}
if(j>0)
{
strcat(buf,"00000000");
for(i=0;i<8;i++)
{
if(buf[i]=='1') c=(c<<1)|1;
else c=c<<1;
}
fwrite(&c,1,1,ofp);
pt1++;
}
fseek(ofp,4,SEEK_SET);
fwrite(&pt1,sizeof(long),1,ofp);
fseek(ofp,pt1,SEEK_SET);
fwrite(&n,sizeof(long),1,ofp);
for(i=0;i<n;i++)
{
fwrite(&(header[i].b),1,1,ofp);
c=strlen(header[i].bits);
fwrite(&c,1,1,ofp);
j=strlen(header[i].bits);
if(j%8!=0)
{
for(f=j%8;f<8;f++)
strcat(header[i].bits,"0");
}
while(header[i].bits[0]!=0)
{
c=0;
for(j=0;j<8;j++)
{
if(header[i].bits[j]=='1') c=(c<<1)|1;
else c=c<<1;
}
strcpy(header[i].bits,header[i].bits+8);
fwrite(&c,1,1,ofp);
}
}
fclose(ifp);
fclose(ofp);
printf("compress successfully!\n");
return;
}
void uncompress()
{
char filename[255],outputfile[255],buf[255],bx[255];
unsigned char c;
long i,j,m,n,f,p,l;
long flength;
FILE *ifp,*ofp;
printf("source filename:");
gets(filename);
ifp=fopen(filename,"rb");
if(ifp==NULL)
{
printf("source file open error!\n");
return;
}
printf("destination filename:");
gets(outputfile);
ofp=fopen(outputfile,"wb");
if(ofp==NULL)
{
printf("destination file open error!\n");
return;
}
fread(&flength,sizeof(long),1,ifp);
fread(&f,sizeof(long),1,ifp);
fseek(ifp,f,SEEK_SET);
fread(&n,sizeof(long),1,ifp);
for(i=0;i<n;i++)
{
fread(&header[i].b,1,1,ifp);
fread(&c,1,1,ifp);
p=(long)c;
header[i].count=p;
header[i].bits[0]=0;
if(p%8>0) m=p/8+1;
else m=p/8;
for(j=0;j<m;j++)
{
fread(&c,1,1,ifp);
f=c;
itoa(f,buf,2);
f=strlen(buf);
for(l=8;l>f;l--)
{
strcat(header[i].bits,"0");
}
strcat(header[i].bits,buf);
}
header[i].bits[p]=0;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strlen(header[i].bits)>strlen(header[j].bits))
{
tmp=header[i];
header[i]=header[j];
header[j]=tmp;
}
}
}
p=strlen(header[n-1].bits);
fseek(ifp,8,SEEK_SET);
m=0;
bx[0]=0;
while(1)
{
while(strlen(bx)<(unsigned int)p)
{
fread(&c,1,1,ifp);
f=c;
itoa(f,buf,2);
f=strlen(buf);
for(l=8;l>f;l--)
{
strcat(bx,"0");
}
strcat(bx,buf);
}
for(i=0;i<n;i++)
{
if(memcmp(header[i].bits,bx,header[i].count)==0) break;
}
strcpy(bx,bx+header[i].count);
c=header[i].b;
fwrite(&c,1,1,ofp);
m++;
if(m==flength) break;
}
fclose(ifp);
fclose(ofp);
printf("Uncompress successfully!\n");
return;
}
int main()
{
int c;
printf("1--Compress file\n");
printf("2--Uncompress file\n");
printf("Select 1 or 2:");
c=getch();
printf("%c\n",c);
if(c=='1') compress();
else if(c=='2') uncompress();
return 0;
}
Ⅷ 無法壓縮因為它包括無法在壓縮文件夾中使用的字元
可能是你要壓縮的文件,命名中含有&*……%¥#@!等這種,還有一種比較容易忽略的是空格( )
Ⅸ 提問 編譯原理問題(高分)
詞法分析 的作用是把輸入的源語句轉化成單詞形式
第五個最右推導沒給要推出的句子 如果是 cbb 那過程也不對
E->CB
C->c
B->b
最右推導的分析為
1 CB
2 Cb
3 cb
你給的文法有問題吧,最右推導通俗的說 就是只按照最右邊的非終結符推導
你這些都是要干什麼的題,如果要考試,後面那幾道的類型幾乎必考!!!
Ⅹ adobe premiere pro cs3編譯錯誤,壓縮錯誤怎麼辦
步驟:
導出——影片——設置——彈出的對話框左邊點「視頻」,右邊相應第一欄「壓縮」選項,點擊選擇最後一個"None" 即可最清晰。默認格式是AVI的。
然後,若你嫌太大,可以用個「格式工廠」把它轉成WMV,畫質不會損很多,基本看不出來,但是體積卻是小很多。要刻錄光碟的話,體積最好不要太大,不然將來那張碟在電腦播放的時候,電腦的光碟機會受不了的。