.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内存流里的包,一切正常!

原文地址:https://www.cnblogs.com/bcszz/p/2455362.html