using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Core; using ICSharpCode.SharpZipLib.Checksums;
string zipPath = @"C:\Users\Cano\Desktop\api\test\百度手机卫士.zip";//要追加文件的压缩包地址 string enName = "success.txt";//要在压缩包中添加的文件名 byte[] bytes = Encoding.ASCII.GetBytes("a test file congratulation!"); ZipFile zF1 = new ZipFile(zipPath);//可以看出 原本没有我要添加的entry ZipEntry zen2 = zF1.GetEntry(enName); zF1.Close(); try { using (ZipOutputStream outStream = new ZipOutputStream(File.Open(zipPath, FileMode.Append))) { ZipEntry newEntry = new ZipEntry(enName); outStream.PutNextEntry(newEntry); outStream.Write(bytes, 0, bytes.Length);//62501104 outStream.CloseEntry(); } ZipFile zF = new ZipFile(zipPath); ZipEntry zen = zF.GetEntry(enName);//这里证明了我已经添加了entry 但是压缩包中并没有这个文件,解压的时候还提示"有额外的数据" zF.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
使用这个库,我的目的是:在一个已经存在的压缩包中追加文件,但是用上面的方式可以成功添加entry,但是打开后并没有我的文件!(我的版本是0.84.0.0)
还请大佬指点一二,在此谢过!
using (ZipFile zipFile = new ZipFile(zipPath)) { zipFile.BeginUpdate(); zipFile.Add(enName); zipFile.CommitUpdate(); }
我这里的ZipFile类没有这几个方法!版本太低了吗?(我的版本 0.84.0.0).
@哎呦,豹豹大人: 嗯,使用新的稳定版本试试
@jello chen: 但是以前的工程使用了旧版本,新版本向下兼容吗?
@哎呦,豹豹大人: 是否兼容,不太确定,没找到0.84.0.0的版本,我试了0.86.0.0的版本,是可以使用上面的方法的
@jello chen: 那你把源码发给我吧,就你的方法!谢谢了!
@jello chen: 我已经结贴了 谢谢!不过我还有个其他问题不知道你是不是遇到过!
就是VS编写C#程序的时候,根本不提示什么变量没有定义(就是打一条红线的那种)等信息,只有F5之后才会显示出来,这是咋啦?
@哎呦,豹豹大人: 用的vs什么版本
@jello chen: 2017
@哎呦,豹豹大人: 你鼠标放在那个变量上面时应该会提示你变量未定义,另外,在运行前一般先要编译通过
加上 newEntry.Size = bytes.Length;
试试
问题依然存在!
跟楼主的需求类似,请问楼主最后怎么解决的???