如何在 C# 中重新压缩 ODT 文件并使其可读?

Posted

技术标签:

【中文标题】如何在 C# 中重新压缩 ODT 文件并使其可读?【英文标题】:How to re-zip an ODT file in C# and make it readable? 【发布时间】:2014-06-05 14:42:42 【问题描述】:

我正在开发一个库,将 ODT 文件的特定部分视为迷你报告引擎的 Razor 模板。它解压缩 odt 并修改 content.xml,结果似乎是正确的,但是当我尝试在 LibreOffice 中打开时,重新压缩的文件给我一个“一般 I/O 错误”。

目前我正在使用 C# 的 ZipFile.CreateFromDirectory() 方法来创建 zip 文件。在将文件压缩在一起方面我是否需要做一些特别的事情,或者我的错误更有可能是其他地方?

显然,我首先想到检查 mimetype 文件。我已经确认将文件组视为单个 zip 存档而不压缩它们 (compressionlevel.none) 不起作用,并给出相同的错误。我猜这可能是因为 mimetype 文件必须是存档中的第一个文件。这真的是问题吗?我能做些什么更好?

【问题讨论】:

Related. 我想知道压缩 mimetype 文件是否可能是问题,但我接触过的人说他们在重新压缩文件后阅读文件没有问题,即7 拉链。这使我相信问题出在其他地方。就是说,谢谢,这非常有用,但我仍在尝试弄清楚如何使用 C# 适当地压缩文件。 我还想指出,我完全没有压缩压缩文件,但无济于事。我无法对链接的问题发表评论,因为回答显然不合适。我正在继续研究这个问题,但没有取得任何进展。 也许您可以使用外部工具? Zip 实现者本身,或者可能是转换器(odt doc)并使用其他格式来更改数据? 目标是在 C# 中以编程方式执行此操作,在一个可用于各种应用程序的相当轻量级的库中。我宁愿使用尽可能少的外部程序,因为从理论上讲,它们没有做任何我不应该做的事情。加上我更改数据的方式(使用 Razor 引擎)的性质,使得编辑 content.xml 文件成为一种非常理想的方法,特别是因为 LibreOffice 具有用于从外部源输入的特殊文本框。 (我对 Libreoffice 的使用经验比任何 MSOffice 应用程序都多) 【参考方案1】:

我最终使用了两个不同的 zip 库。 DotNetZip 的 ZipOutputStream 允许我指定首先是未压缩的 mimefile。然后我使用它的 ZipFile 类来添加必要的文件夹及其内容。我在使用 DotNetZip 的 Extract() 方法时遇到了问题,所以我实际上是使用 .net 的压缩库来解压缩文件并使用 DotNetZip 将其压缩备份。

我仍在寻找更好的方法来做到这一点,但它现在有效。

【讨论】:

以上是关于如何在 C# 中重新压缩 ODT 文件并使其可读?的主要内容,如果未能解决你的问题,请参考以下文章

在 Hive 表 hdfs 文件夹中写入文件并使其可用于从 Hive 查询

从 Play 商店更新我的应用程序后,如何在 Android 上保存 QSettings 文件的内容以使其可读?

为属性设置默认值并使其可序列化

如何在Textview中检测网站链接并使其可点击[重复]

Groovy:如何定义带有参数的 java callable 并使其可用于 groovy shell?

如何限制图例大小并使其可使用饼图滚动?和 javafx 布局