zoukankan      html  css  js  c++  java
  • .net 在内存中解压Zip并修改再打包

    最近做个组件,需要从服务器端获取一个zip包(是一些实体元数据及配置方案的资源包),然后将zip包中的配置文件修改后重新上传发布。

    开始时,我直接用Package类读取内存中获取的zip包数据,然后读取包中的一个xml文件,修改它的内容,然后写回流,结果无法导回系统(系统不认这个包)。

    是不是文件损坏?我把修改完的数据流输出为一个zip文件,打开查看:文件内容正确,看上去一切正常,用WINDOWS系统将文件手动导进系统——我靠!能导进,说明文件无损坏,zip文件保存得似乎也没有问题。

    那是啥原因?难道Package类(实际它默认是用ZipPackage来实例化)解压和压缩算法和服务器的不一样?同样的几个文件,我用Package类进行zip打一个包,然后用windows自带的zip打另打一个包,两个文件大小的确有差异,windows自带的zip打包功能似乎算法更好,能更省些空间。但这个不重要了,我重新用Package做解压和压缩,但这次不是在内存里,而是输出为文件进行操作,一切正常,修改后打包能导进系统,说明系统还是认这个Package压缩好的包的。

    猜想直接在PackagePart的流在内存中读后修改直接写回的话好像会产生问题,于是后来解决办法是,先将内存A中的zip包中的文件先解压到内存B中,在B中修改完成后,再压缩到内存C中,然后上传C内存流里的包,一切正常!

  • 相关阅读:
    c#函数重载
    (1).net c# 一步一步自己写三层代码生成器(主界面及连接数据库界面)
    C#给datagridview某行赋值(转)
    好的软件人员必看的六十本书
    C# 语言规范
    spring 排除指定的类或者包扫描
    java web spring 发送邮件
    spring-data-redis和jedis版本对应收集总结
    python 多线程和多进程基本写法
    python 调用nmap
  • 原文地址:https://www.cnblogs.com/bcszz/p/2455362.html
Copyright © 2011-2022 走看看