嗨,我将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支持。