我有一个函数,该函数创建一个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中压缩文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)