2012-04-15 57 views
0

你好,我試圖壓縮使用GZipStream的文件。我無法正確解壓縮文件與C#

我已經創建了自己的延伸,我們稱之爲.myextension

我儘量壓縮.myextension,並保持它的擴展。我的意思是我試圖將.myextension壓縮到相同的擴展名。例如:我有myfile.myextension和 我想將它壓縮到myfile.myextension。有用。我可以很好地壓縮我的文件。

問題是,當我嘗試使用GZipStream對其進行解壓縮時,它說幻數是不正確的。

我該如何解決這個問題?當解壓縮時,我應該將擴展名更改爲.gz?我應該以某種方式轉換它嗎?請幫助我,我不知道如何繼續。

+1

這與文件擴展名無關。你可以使用7-zip等應用程序解壓縮壓縮文件嗎?如果是,您的解壓縮代碼可能包含錯誤;請發佈代碼。 – Yogu 2012-04-15 20:54:44

+1

它與文件擴展名無關。你需要留下更好的面​​包屑。 – 2012-04-15 20:55:00

+0

擴展不是問題,你是否在解壓縮之前讀取文件而不是字節[]?顯示一些解壓代碼 – 2012-04-15 20:57:29

回答

1

這是一個常見問題。我想向您提供類似的螺紋與解決方案:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427166&SiteID=1

A「幻數」通常是一個固定值,而且經常出現有些arbitary,可能難以辨認。例如,一行代碼可以具有:

If X = 31 then 
    'Do Something 
End If 

在這種情況下,31是「幻數」:它沒有明顯的意義(並且只要編碼而言,嘲笑的術語)。

文件(不同類型)通常會將前幾個字節設置爲某些值,例如,前兩個字節爲十六進制數的文件42 4D是位圖文件。這些數字是'幻數'(在這種情況下,42 4D對應於字符BM)。其他文件具有相似的「幻數」。

http://forums.microsoft.com/msdn/showpost.aspx?postid=1154042&siteid=1

當然,有人分鐘(團隊)開發,支持ZIP,bzip2的,gzip的,RAR,CAB,JAR,DAA和ISO文件沒有大驚小怪壓縮/解壓縮的自定義任務,我會使用它,直到那個時候,我會堅持使用開源命令行工具。

當然,你可以編碼解決方案,但這是一個很低的掛果。爲了處理zip文件,沒有本地的.NET庫(至少現在還沒有)。現在支持處理zip文件中的壓縮流,但不導航存檔本身。

現在,正如我在前面提到的,有很多像sourceforge上的開源zip壓縮工具。這些在Win2003 Server x64上運行良好,我可以證明這一點。但是,如果您堅持使用.NET解壓縮zip解壓縮,請使用http://www.icsharpcode.net/OpenSource/SharpZipLib/,它是開源的,並且具有乾淨可靠的100%.NET實現。

0

首先,從其他有various issues的用戶開始,GZipStream不應該被使用,因爲它有錯誤。它不會正確壓縮短字符串,也不會檢測到損壞的壓縮數據。這是一個非常糟糕的實施。

至於你的問題,其他人使用GZipStream看到一個四字節前綴的gzip數據,這是未壓縮的字節數。如果這是寫入文件,那會導致你看到的問題。 gzip文件應該以十六進制字節1f 8b開頭。