2013-11-26 63 views
1

嗨,我使用Xamarin與C#使一個應用程序,可以壓縮和解壓縮文件,所以幾次嘗試後,我發現zipStorer。ZipStorer沒有在Android中創建任何文件c#

http://zipstorer.codeplex.com/

這裏是我的代碼

ZipStorer zip = ZipStorer.Open(Convert.ToString(Android.OS.Environment.GetExternalStoragePublicDirectory("BrSatisfacao/aaa.zip")), FileAccess.Read); 

       List<ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir(); 

       string path; 

       foreach (ZipStorer.ZipFileEntry entry in dir) 

       { 

        if (Path.GetFileName(entry.FilenameInZip) == "08.jpg") 

        { 

         path = Path.Combine(Convert.ToString(Android.OS.Environment.GetExternalStoragePublicDirectory("BrSatisfacao/")), Path.GetFileName(entry.FilenameInZip)); 

         zip.ExtractFile(entry, Convert.ToString(Android.OS.Environment.GetExternalStoragePublicDirectory("BrSatisfacao/sample.jpg"))); 

         break; 

        } 

       } 

       zip.Close(); 

幾個小時的代碼運行正常,打開拉鍊,並顯示所有的控制檯,但正在創建無拉鍊......上午後我做錯了什麼?

+0

該代碼似乎打開一個zip並檢查內容。我沒有看到任何可以創建新zip文件的東西。 – Jason

+0

給他們一個閱讀,我也得到了這個印象,我需要像保存(ZIP,某處),但沒有這樣的事情,它說它自己做,當你關閉()魔術發生 – user2917437

+0

使用創建()創建一個新的壓縮文件,和AddFile()將文件添加到壓縮文件。你沒有做這些事情。 – Jason

回答

1

內部ZipStorer使用的字符集437做(在ZipStorer.cs線85)的編碼和編碼取消:

private static Encoding DefaultEncoding = Encoding.GetEncoding(437); 

Xamarin不包括該字符的,當你建立你的應用程序的默認設置。如Localisation And Internationalisation文檔中所述:

爲了減小應用程序的大小,Xamarin.iOS不包含任何特定的編碼,並且您必須指示mtouch包含您需要的編碼支持的程序集。

要包含的字符集,添加西字符通過在應用程序中的國際化設置來設置:

enter image description here 確保你檢查這兩個調試發佈

當我將zip支持添加到我的應用程序時,我無法得到這個工作。最後,我使用Java IO庫推出了自己的zip支持,但可能有一個組件可用於添加跨平臺zip支持。

+0

對我來說就像一個魅力!但有趣的是,它實際上在調試模式下工作......問題在我打包時開始。 – Thpramos

相關問題