C# 在写入文件之前压缩XML

C# 在写入文件之前压缩XML,c#,xml,gzip,C#,Xml,Gzip,我试图将大量数据保存到XML中,结果文件的大小非常大。我搜索过压缩,但我找到的所有示例都是先写文件,然后读文件压缩到另一个文件,最后都是大文件和压缩文件,最接近于删除中间的写后读步骤,最后是一个包含无扩展名文件的zip文件(我可以在记事本中以XML格式打开) 这就是我现在拥有的: XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; using (FileStream outFile = Fil

我试图将大量数据保存到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扩展名?

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

您是否见过作为“filename.tar.gz”下载的Unix软件包?这通常是命名格式-他们获取一个归档文件(filename.tar)并对其应用GZip压缩(filename.tar.gz)


实际上,从技术上讲,将文件命名为“.zip”(这是一种完全不同的、更常用的格式)会造成一些混乱。如果您想遵循UNIX传统,只需将文件命名为“file.xml.gz”。如果您想归档它,请使用Tar归档库。其他库(如7-zip)可能有更简单的压缩系统,可以同时为您提供这两种功能,例如,如果您希望此文件为.zip文件,Windows计算机上的用户可以轻松阅读。

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


您所拥有的看起来是正确的。这似乎是压缩流。这不是它在做的吗?顺便说一句,如果文件“非常大”,我会用记事本以外的东西打开它。@harpo在记事本中打开只是为了看看它是否写对了,是的,但是文件没有扩展名。问题是zip文件的内容包含一个名为
file
的无扩展名文件。这是正确的吗?你不需要给它一个名字“在拉链里面”。只需通过GZip解压流以与压缩方式非常相似的方式对其进行解压,并将解压后的流传递给
XmlReader
等。现在唯一的细节是,压缩文件的名称中包含.xml,但它的工作方式和它的重要性并不重要。谢谢