Sí, lo he usado en el pasado. Subclasifed DataSet una vez para soportar persistir a un archivo (a través del método ReadXML/WriteXML). Como una ventaja adicional, decidí permitir que, opcionalmente, se comprimiera si lo deseaba (esto, como ya deberían saber, es extremadamente efectivo con datos textuales como XML).
he utilizado la GZipStream clase (que era mi entendimiento en el momento en que la relacionada DeflateStream era simplemente GZip sin información de cabecera, o algo por el — estoy seguro de que alguien me podría corregir en esto). Funciona de manera sencilla mediante el uso de piggy-backing en la parte superior de otra secuencia y, por lo tanto, luego utiliza el GZipStream en su lugar. En mi caso, era una copia de seguridad en FileStream.
dado un MemoryStream para ser llenado con la salida de myDataSet.WriteXML()
, hice algo como lo siguiente:
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);
}
Dónde Save()
y Pump()
son métodos simples como los siguientes:
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);
}
En realidad, el espacio de nombres 'System.IO.Packaging' contiene clases para trabajar con paquetes de estilo de Open Packaging. Puede usarlo para crear archivos ZIP (si no le importan algunos archivos adicionales que se incluirán en su ZIP), pero no se puede usar para abrir * ningún archivo * zip. Consulte [la parte inferior de la documentación de la clase ZipPackage] (http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage (v = vs.85) .aspx) para obtener más información (esta comunidad no es presente en el documento .NET 4.0 pero sigue siendo válido). – larsmoa