Monotouch – ICSharpCode.SharpZipLib给出错误

Hy家伙,

我正在尝试使用ICSharpCode.SharpZipLib库生成一个Zip文件,但它会引起一个非常奇怪的错误.

码:

public static void ZipFiles(string inputFolderPath,string outputPathAndFile,string password)       
{
        ArrayList ar = GenerateFileList(inputFolderPath); // generate file list
        int TrimLength = (Directory.GetParent(inputFolderPath)).ToString().Length;

        TrimLength += 1; //remove '\'
        FileStream ostream;
        byte[] obuffer;

        ZipOutputStream oZipStream = new ZipOutputStream(File.Create(outputPathAndFile)); // create zip stream
        if (password != null && password != String.Empty)
            oZipStream.Password = password;
        oZipStream.SetLevel(9); // maximum compression
        ZipEntry oZipEntry;
        foreach (string Fil in ar) // for each file,generate a zipentry
        {
            oZipEntry = new ZipEntry(Fil.Remove(0,TrimLength));
            oZipStream.PutNextEntry(oZipEntry);

            if (!Fil.EndsWith(@"/")) // if a file ends with '/' its a directory
            {
                ostream = File.OpenRead(Fil);
                obuffer = new byte[ostream.Length];
                ostream.Read(obuffer,obuffer.Length);
                oZipStream.Write(obuffer,obuffer.Length);
            }
        }
        oZipStream.Finish();
        oZipStream.Close();
}


private static ArrayList GenerateFileList(string Dir)
{
        ArrayList fils = new ArrayList();
        bool Empty = true;
        foreach (string file in Directory.GetFiles(Dir,"*.xml")) // add each file in directory
        {
            fils.Add(file);
            Empty = false;
        }

        if (Empty)
        {
            if (Directory.GetDirectories(Dir).Length == 0)
                // if directory is completely empty,add it
            {
                fils.Add(Dir + @"/");
            }
        }

        foreach (string dirs in Directory.GetDirectories(Dir)) // recursive
        {
            foreach (object obj in GenerateFileList(dirs))
            {
                fils.Add(obj);
            }
        }
        return fils; // return file list
}

错误

Unhandled Exception: System.NotSupportedException: CodePage 437 not supported
  at System.Text.Encoding.GetEncoding (Int32 codepage) [0x00000] in <filename unkNown>:0 
  at ICSharpCode.SharpZipLib.Zip.ZipConstants.ConvertToArray (System.String str) [0x00000] in <filename unkNown>:0 
  at ICSharpCode.SharpZipLib.Zip.ZipConstants.ConvertToArray (Int32 flags,System.String str) [0x00000] in <filename unkNown>:0 
  at ICSharpCode.SharpZipLib.Zip.ZipOutputStream.PutNextEntry (ICSharpCode.SharpZipLib.Zip.ZipEntry entry) [0x00000] in <filename unkNown>:0 
  at WpfPrototype1.MainInvoicesView.ZipFiles (System.String inputFolderPath,System.String outputPathAndFile,System.String password) [0x00000] in <filename unkNown>:0 
  at WpfPrototype1.MainInvoicesView.<ViewDidLoad>m__6 (System.Object,System.EventArgs ) [0x00000] in <filename unkNown>:0 
  at MonoTouch.UIKit.UIControlEventProxy.Activated () [0x00000] in <filename unkNown>:0 
  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
  at MonoTouch.UIKit.UIApplication.Main (System.String[] args,System.String principalClassName,System.String delegateClassName) [0x00000] in <filename unkNown>:0 
  at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in <filename unkNown>:0 
  at WpfPrototype1.Application.Main (System.String[] args) [0x00000] in <filename unkNown>:0

如何使代码支持CodePage 437?

问候,
克劳迪奥

解决方法

MonoTouch删除了I18N代码页,它不能静态地确定您需要的.在这种情况下,您可以强制使用monotouch来保存所需的代码页集合(West):两种方式之一:

>单击Project-> [ProjectName]选项
>选择iPhone Build
>你现在有两个选择
一个.从I18n装配体列表中选择“西”
湾将“-i18n =西”添加到“额外参数”

注意:对于配置和平台的每个组合,您都需要执行步骤3.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...