首页 新闻 会员 周边 捐助

使用 ICSharpCode.SharpZipLib 追加文件到已有压缩包的问题

1
悬赏园豆:180 [已解决问题] 解决于 2018-06-11 10:17
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)

还请大佬指点一二,在此谢过!

哎呦,豹豹大人的主页 哎呦,豹豹大人 | 初学一级 | 园豆:58
提问于:2018-06-06 20:32
< >
分享
最佳答案
0
            using (ZipFile zipFile = new ZipFile(zipPath))
            {
                zipFile.BeginUpdate();
                zipFile.Add(enName);
                zipFile.CommitUpdate();
            }
收获园豆:180
jello chen | 大侠五级 |园豆:7336 | 2018-06-06 21:30

我这里的ZipFile类没有这几个方法!版本太低了吗?(我的版本 0.84.0.0).

哎呦,豹豹大人 | 园豆:58 (初学一级) | 2018-06-07 09:12

@哎呦,豹豹大人: 嗯,使用新的稳定版本试试

jello chen | 园豆:7336 (大侠五级) | 2018-06-07 12:49

@jello chen: 但是以前的工程使用了旧版本,新版本向下兼容吗?

哎呦,豹豹大人 | 园豆:58 (初学一级) | 2018-06-07 13:24

@哎呦,豹豹大人: 是否兼容,不太确定,没找到0.84.0.0的版本,我试了0.86.0.0的版本,是可以使用上面的方法的

jello chen | 园豆:7336 (大侠五级) | 2018-06-07 23:11

@jello chen: 那你把源码发给我吧,就你的方法!谢谢了!

哎呦,豹豹大人 | 园豆:58 (初学一级) | 2018-06-08 14:37
jello chen | 园豆:7336 (大侠五级) | 2018-06-08 20:31

@jello chen: 我已经结贴了  谢谢!不过我还有个其他问题不知道你是不是遇到过!

就是VS编写C#程序的时候,根本不提示什么变量没有定义(就是打一条红线的那种)等信息,只有F5之后才会显示出来,这是咋啦?

哎呦,豹豹大人 | 园豆:58 (初学一级) | 2018-06-11 10:20

@哎呦,豹豹大人: 用的vs什么版本

jello chen | 园豆:7336 (大侠五级) | 2018-06-11 13:20

@jello chen: 2017

哎呦,豹豹大人 | 园豆:58 (初学一级) | 2018-06-11 14:06

@哎呦,豹豹大人: 你鼠标放在那个变量上面时应该会提示你变量未定义,另外,在运行前一般先要编译通过

jello chen | 园豆:7336 (大侠五级) | 2018-06-12 21:37
其他回答(2)
0

加上 newEntry.Size = bytes.Length; 试试

dudu | 园豆:29568 (高人七级) | 2018-06-06 21:32

问题依然存在!

支持(0) 反对(0) 哎呦,豹豹大人 | 园豆:58 (初学一级) | 2018-06-07 09:13
0

跟楼主的需求类似,请问楼主最后怎么解决的???

小强菜菜 | 园豆:204 (菜鸟二级) | 2020-07-20 14:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册