嗨,我将Xamarin与c#结合使用来制作可以压缩和解压缩文件的应用程序,因此在尝试了几次之后,我发现了zipStorer。

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();


几个小时后,代码运行良好,打开了zip并在控制台中显示了所有内容,但是没有创建zip ...我在做错什么吗?

最佳答案

在内部,ZipStorer使用字符集437进行编码和取消编码(ZipStorer.cs中的第85行):

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


Xamarin在构建应用程序时默认不包含此字符集。如Localisation And Internationalisation文档中所述:

为了减小应用程序的大小,Xamarin.iOS不包含任何特定的编码,并且您必须指示mtouch包含包含所需编码支持的程序集。

要包括字符集,请通过应用程序的国际化设置添加西字符集:


确保同时检查“调试”和“发行”。

当我向应用程序添加zip支持时,我无法使用此功能。最后,我使用Java IO库推出了自己的zip支持,但可能会有一个组件可用于添加跨平台zip支持。

09-30 14:10