c# - .NET - 将数据集(XML 数据)流式传输到 ZIP 文件?

标签 c# compression zip

我有一个由 XML 数据组成的数据集,我可以轻松地将其输出到一个文件中:

DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
ds.Load(reader, LoadOption.PreserveChanges, ds.Tables[0]);
ds.WriteXml("C:\\test.xml");

但是我想做的是将 XML 压缩成 ZIP 或其他类型的压缩文件,然后将此文件保存到磁盘,同时将 ZIP 文件拆分为 1MB 的 block 。我真的不想保存未压缩的文件,然后压缩它,然后拆分它。

我要找的具体是:

  1. 一个合适的压缩库,我可以将 XML 流式传输到该库并将 zip 文件保存到磁盘
  2. 一些示例 C# 代码可以告诉我如何执行此操作。

最佳答案

我已经设法使用 .NET 2.0 的 gzip 压缩来压缩 DataSet 的 XML 流。

这是我几年前写的关于它的博文:

Saving DataSets Locally With Compression

...这是我添加到 DataSet 的部分类中以编写压缩文件的代码(博客文章也有阅读代码):

public void WriteFile(string fileName)
{
    using (FileStream fs = new FileStream(fileName, FileMode.Create))
    {
        Stream s;
        if (Path.GetExtension(fileName) == ".cmx")
        {
            s = new GZipStream(fs, CompressionMode.Compress);
        }
        else if (Path.GetExtension(fileName) == ".cmz")
        {
            s = new DeflateStream(fs, CompressionMode.Compress);
        }
        else
        {
            s = fs;
        }
        WriteXml(s);
        s.Close();
    }
} 

请注意,此代码根据文件的扩展名使用不同的压缩方案。这纯粹是为了让我可以用我的数据集测试一个方案与另一个方案的对比。

关于c# - .NET - 将数据集(XML 数据)流式传输到 ZIP 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223738/

相关文章:

linux - Unix zip 命令正在更新现有存档而不是创建新存档

python - 如何以内存高效的方式将大量文件添加到 zip?

python - 如何在 python Flask 框架中发送 zip 文件?

c# - Bing map 缩放级别不会在每次属性更改时更新

c# - 远程共享文件夹和驱动器 C#

c# - 无法在 app.config 上写入设置(或未显示任何更改)

c# - WCF: "Failed to open System.ServiceModel.Channels.ClientReliableDuplexSessionChannel"

linux - 使用 shell 脚本压缩字典

javascript - 无损压缩方法在base64编码之前缩短字符串以使其更短?

compression - Zlib deflate/inflate 适当的初始化