首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MemoryStream的SharpZipLib

使用MemoryStream的SharpZipLib
EN

Stack Overflow用户
提问于 2011-11-23 18:55:29
回答 1查看 6.6K关注 0票数 1

我一直在用asp.net开发一个web应用程序,我有一个关于SharZipLib的问题。我有一个名为Template.odt的文件(来自Open Office),这个文件是一个压缩文件(像docx),里面还有其他一些文件(manifiest,xml,image等)。我需要打开这个文件,更改一个名为content.xml和styles.xml的文件,并保存到另一个.odt文件中,然后交给我的客户。但是我不确定我们是否可以使用临时文件,所以我在想如何使用MemoryStream来做到这一点。

看看我得到了什么:

代码语言:javascript
复制
protected byte[ GetReport() {
    Stream inputStream = File.OpenRead(Server.MapPath("~/Odt/Template.odt"));
    var zipInputStream = new ZipInputStream(inputStream);
    var outputStream = new MemoryStream();
    var zipOutputStream = new ZipOutputStream(outputStream);
    ZipEntry entry = zipInputStream.GetNextEntry();
    while (entry != null) {     

        if (entry.Name == "content.xml") 
            // how change the content ?
        else if (entry.Name == "styles.xml") 
            // how change the content ?

        // how to add it or create folders in the output ?
        zipOutputStream.Write( ??? );

        entry = zipInputStream.GetNextEntry();
    }
    zipOutputStream.Flush();
    return outputStream.ToArray();
}

我不确定这是不是对的,但我想它已经在路上了。

我尝试从ZipEntry实例中获取ExtraData,但得到的结果为空,这正常吗?

有人能帮我吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-27 00:53:35

有关如何在内存中更新ZIP文件的示例可在此处找到:http://wiki.sharpdevelop.net/SharpZipLib_Updating.ashx#Updating_a_zip_file_in_memory_1

在您的例子中,您可能必须将content.xml加载到XmlDocumentXDocument中才能修改它-但这取决于您尝试更改的确切内容。

作为侧记:当使用streams时,请确保您正在处理它们。最简单的方法是将操作包装在using语句中:

代码语言:javascript
复制
   using(var inputStream = File.OpenRead(Server.MapPath("~/Odt/Template.odt")))
   {
      // ...
   }

更多信息请访问:http://www.codeproject.com/Articles/6564/Understanding-the-using-statement-in-C

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8240956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档