如何在Xamarin for Android中压缩文件?

如何在Xamarin for Android中压缩文件?,第1张

概述我有一个函数,该函数创建一个zip文件,并传递一个字符串数组.该函数确实可以成功创建zip文件和其中的zip入口文件,但是这些zip入口文件为空.我尝试了几种不同的方法-以下功能代码与我所能达到的最接近的功能:publicstaticboolZipFile(string[]arrFiles,stringsZipToDirec

我有一个函数,该函数创建一个zip文件,并传递一个字符串数组.该函数确实可以成功创建zip文件和其中的zip入口文件,但是这些zip入口文件为空.我尝试了几种不同的方法-以下功能代码与我所能达到的最接近的功能:

    public static bool Zipfile(string[] arrfiles, string sZipToDirectory, string sZipfilename)    {        if (Directory.Exists(sZipToDirectory))        {            fileStream fNewZipfileStream;            ZipOutputStream zos;            try {                fNewZipfileStream = file.Create(sZipToDirectory + sZipfilename);                zos = new ZipOutputStream(fNewZipfileStream);                for (int i = 0; i < arrfiles.Length; i++) {                    ZipEntry entry = new ZipEntry(arrfiles[i].Substring(arrfiles[i].LastIndexOf("/") + 1));                    zos.PutNextEntry(entry);                    fileStream fStream = file.OpenRead(arrfiles[i]);                    BufferedStream bfStrm = new BufferedStream(fStream);                    byte[] buffer = new byte[bfStrm.Length];                    int count;                    while ((count = bfStrm.Read(buffer, 0, 1024)) != -1) {                        zos.Write(buffer);                    }                    bfStrm.Close();                    fStream.Close();                    zos.CloseEntry();                }                zos.Close();                fNewZipfileStream.Close();                return true;            }            catch (Exception ex)            {                string sErr = ex.Message;                return false;            }            finally            {                fNewZipfileStream = null;                zos = null;            }        }        else        {            return false;        }    }

我认为这与字节流处理有关.我已经尝试了这段处理流的代码,但是它陷入了无限循环:

while ((count = fStream.Read(buffer, 0, 1024)) != -1) {        zos.Write(buffer, 0, count);}fStream.Close();

解决方法:

在fileStream上使用Read()返回读入流的字节数,如果已到达流的末尾,则返回0.它永远不会返回值-1.

从MSDN开始:

读入缓冲区的字节总数.如果该字节数当前不可用,则该数目可能小于请求的字节数;如果到达流的末尾,则该数目可能为零.

我将您的代码修改为以下内容:

System.IO.fileStream fos = new System.IO.fileStream(sZipToDirectory + sZipfilename, fileMode.Create);Java.Util.Zip.ZipOutputStream zos = new Java.Util.Zip.ZipOutputStream(fos);byte[] buffer = new byte[1024];for (int i = 0; i < arrfiles.Length; i++) {    fileInfo fi = new fileInfo (arrfiles[i]);    Java.IO.fileinputStream fis = new Java.IO.fileinputStream(fi.Fullname);    ZipEntry entry = new ZipEntry(arrfiles[i].Substring(arrfiles[i].LastIndexOf("/") + 1));    zos.PutNextEntry(entry);    int count = 0;    while ((count = fis.Read(buffer)) > 0) {        zos.Write(buffer, 0, count);    }    fis.Close();    zos.CloseEntry();}

这几乎与我过去在AndroID上用于创建zip存档的代码相同.

总结

以上是内存溢出为你收集整理的如何在Xamarin for Android中压缩文件?全部内容,希望文章能够帮你解决如何在Xamarin for Android中压缩文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1088194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存