【问题标题】:Compressing XML before writing file在写入文件之前压缩 XML
【发布时间】:2013-05-15 10:54:00
【问题描述】:

我正在尝试将大量数据保存到 XML 中,但文件最终会变得非常大。我搜索了压缩,但我发现的所有示例首先写入文件,然后读取它以压缩到另一个文件,以大文件和压缩文件结束,最接近删除写入然后读取的中间步骤,结束加上一个包含无扩展名文件的 zip(我可以在记事本中以 XML 格式打开)。

这就是我现在拥有的:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (FileStream outFile = File.Create(@"File.zip"))
{
    using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress))
    {
        using (XmlWriter writer = XmlWriter.Create(Compress, settings))
        {
            //write the XML
        }
    }
}

如何使 zip 中的文件具有 XML 扩展名?

【问题讨论】:

  • 你所拥有的看起来是正确的。这似乎压缩了流内。这不是它在做什么吗?顺便说一句,如果文件“非常大”,我会用记事本以外的方式打开它。
  • @harpo 在记事本中打开只是为了看看它是否写对了,但文件没有扩展名
  • 问题是 zip 文件的内容包含一个名为 File 的无扩展名文件。这是正确的吗?
  • 你不需要在“压缩包内”给它一个名字。只需通过 GZip 解压流以与压缩方式非常相似的方式对其进行解压,然后将解压后的流传递给 XmlReader

标签: c# xml gzip


【解决方案1】:

我认为这可能是对基本面的一点误解。据我所知,GZip 是一个压缩系统,但不是归档系统。在使用 UNIX 系统时,它们往往被视为两个独立的事物(而 ZIP 或 RAR 压缩两者兼而有之)。归档会将多个文件放在一个文件中,而压缩会使该文件变小。

您是否见过以“filename.tar.gz”形式下载的 Unix 软件包?这通常是命名格式 - 他们采用存档文件 (filename.tar) 并对其应用 GZip 压缩 (filename.tar.gz)

实际上,从技术上讲,将文件命名为“.zip”(这是一种完全不同的、更常用的格式)会引起一些混乱。如果您想遵循 UNIX 的传统,只需将您的文件命名为“file.xml.gz”。如果要存档,请使用 Tar 存档库。其他库(例如 7-zip)可能具有更简单的压缩系统,可以同时满足您的需求,例如,如果您希望此文件为 .zip,便于人们在 Windows 计算机上阅读。

【讨论】:

  • 现在唯一的细节是压缩文件的名称中有.xml,但它的工作原理并不重要。谢谢
【解决方案2】:

我认为您必须先写入临时文件。来看看

DotNetPerls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多