我有一个由 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 。我真的不想保存未压缩的文件,然后压缩它,然后拆分它。
我要找的具体是:
- 一个合适的压缩库,我可以将 XML 流式传输到该库并将 zip 文件保存到磁盘
- 一些示例 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/