我有一个由XML数据组成的DataSet,我可以轻松地将其输出到一个文件:
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块.我真的不想保存未压缩的文件,然后压缩它,然后拆分它.
我特别想要的是:
一个合适的压缩库,我可以将XML流式传输到并将zip文件保存到磁盘
一些示例C#代码可以告诉我如何做到这一点.
Matt Hamilto.. 10
我已经设法使用.NET 2.0的gzip压缩来压缩DataSet的XML流.
这是我几年前写的关于它的博客文章:
通过压缩在本地保存数据集
...这里是我添加到我的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(); } }
请注意,此代码根据文件的扩展名使用不同的压缩方案.这纯粹是因为我可以使用我的DataSet测试另一个方案.
我已经设法使用.NET 2.0的gzip压缩来压缩DataSet的XML流.
这是我几年前写的关于它的博客文章:
通过压缩在本地保存数据集
...这里是我添加到我的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(); } }
请注意,此代码根据文件的扩展名使用不同的压缩方案.这纯粹是因为我可以使用我的DataSet测试另一个方案.