Có, tôi đã sử dụng nó trong quá khứ. Tôi đã xếp loại DataSet một lần để tự hỗ trợ cho một tệp (thông qua phương thức ReadXML/WriteXML). Là một phần thưởng thêm, tôi quyết định cho phép nó được, tùy chọn, nén nếu muốn (điều này, như tất cả các bạn đã biết, là cực kỳ hiệu quả với dữ liệu văn bản như XML).
Tôi đã sử dụng lớp GZipStream (đó là sự hiểu biết của tôi tại thời điểm DeflateStream liên quan chỉ đơn thuần là GZip không có thông tin tiêu đề hoặc một số như vậy — Tôi chắc chắn ai đó có thể sửa lỗi này). Nó hoạt động khá đơn giản bởi sự ủng hộ của heo trên đầu trang của một luồng khác và do đó bạn sử dụng GZipStream ở vị trí của nó. Trong trường hợp của tôi, đó là sự ủng hộ của heo trên một FileStream.
Cho một MemoryStream để được lấp đầy với đầu ra của myDataSet.WriteXML()
, tôi đã làm một cái gì đó như sau:
if (CompressData)
{
// Write to memory
mStream = new MemoryStream();
Save(mStream);
mStream.Seek(0, SeekOrigin.Begin);
// Filter that through a GZipStream and then to file
fStream = new FileStream(Path.Combine(CacheFilePath, FileName + ".gz"),
FileMode.OpenOrCreate);
zipStream = new GZipStream(fStream, CompressionMode.Compress, true);
Pump(mStream, zipStream);
}
else
{
// Write straight to file
fStream = new FileStream(Path.Combine(CacheFilePath, FileName),
FileMode.OpenOrCreate);
Save(fStream);
}
đâu Save()
và Pump()
là phương pháp đơn giản như sau:
private void Pump(Stream input, Stream output)
{
int n;
byte[] bytes = new byte[4096]; // 4KiB at a time
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
public void Save(Stream stream)
{
AcceptChanges();
WriteXml(stream, XmlWriteMode.WriteSchema);
}
Nguồn
2008-10-08 19:46:39
Thực ra, không gian tên 'System.IO.Packaging' chứa các lớp để làm việc với các gói kiểu Bao bì mở. Bạn có thể sử dụng nó để tạo các tệp ZIP (nếu bạn không quan tâm đến một số tệp phụ sẽ được bao gồm trong ZIP của bạn), nhưng nó không thể được sử dụng để mở tệp * any * zip. Xem [dưới cùng của tài liệu lớp ZipPackage] (http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage (v = vs.85) .aspx) để biết thêm thông tin (cộng đồng này không phải là có trong tài liệu .NET 4.0 nhưng vẫn hợp lệ). – larsmoa