txt texto sobrescribir separado por notas modificar manejo lineas leer guardar escribir ejemplos datos comas bloc archivos archivo agregar .net compression zip
ZipArchivehttp://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspxejemplo

.net - texto - ¿Cómo usar System.IO.Compression para leer/escribir archivos ZIP?



modificar un txt en c# (8)

Dave, muy bueno! No sabía que estaba allí.

Ahora que sé qué buscar, pude encontrar un artículo con un pequeño ejemplo de código sobre cómo usarlo: http://weblogs.asp.net/jgalloway/archive/2007/10/25/creating-zip -archives-in-net-without-an-external-library-like-sharpziplib.aspx

En una nota relacionada, también encontré el proyecto DotNetZip que parece extremadamente fácil de usar.

Sé que hay bibliotecas por ahí para trabajar con archivos ZIP . Y, alternativamente, puede usar la funcionalidad integrada en Windows para trabajar con archivos ZIP .

Pero, me pregunto si alguien ha descubierto cómo usar las herramientas integradas en el espacio de nombres System.IO.Compression dentro de .NET para leer / escribir archivos ZIP. O, ¿no es posible usar solo este espacio de nombres?

ACTUALIZADO: Parece que alguien comenta que el espacio de nombres System.IO.Packaging también podría ser útil con esto. ¿Alguien sabe exactamente cómo hacerlo?



Sí, lo he usado en el pasado. Subclasifiqué DataSet una vez para soportar la persistencia de 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).

Usé la clase GZipStream (entendí en ese momento que el DeflateStream relacionado era simplemente GZip sin información de encabezado, o algo así - estoy seguro de que alguien podría corregirme sobre 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 completar 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); }

Donde 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); }



Deseará utilizar una biblioteca de terceros, como http://www.codeplex.com/DotNetZip , en lugar de intentar usar GZipStream o DeflateStream para leer un archivo comprimido.

Las *** clases Stream en .NET pueden permitirle leer o escribir flujos comprimidos de bytes. Estas clases NO leen ni escriben archivos zip. El archivo zip es datos comprimidos rodeados por "un sobre" o un encabezado. Piénselo como metadatos: incluye el nombre del archivo, la marca de tiempo, el CRC y un montón de otras cosas. Las ** clases Stream producen solo la secuencia de datos comprimidos, y no saben cómo producir o consumir los metadatos, que se describe en la especificación de formato PKZip mantenida por PKWare.

Las bibliotecas de terceros como DotNetZip manejan los metadatos en un archivo ZIP. Pueden o no pueden usar la clase System.IO.Compression.DeflateStream () para producir la secuencia comprimida de bytes. En versiones anteriores, por ejemplo, DotNetZip utilizaba el DeflateStream incorporado. A partir de v1.7, DotNetZip incluye su propio DeflateStream, que es más eficiente que el enviado en .NET Framework. Como beneficio adicional, el DeflateStream incrustado en DotNetZip permite utilizar DotNetZip en .NET Compact Framework 2.0, que carece de System.IO.Compression.DeflateStream. (fue agregado en Compact Framework 3.5)

Hay un buen foro en el sitio DotNetZip si tiene más preguntas. Ejemplo de código C #:

try { using (ZipFile zip = new ZipFile()) { zip.AddDirectory(DirectoryToZip); // recurses subdirs zip.Save(Filename); } } catch (System.Exception ex1) { System.Console.Error.WriteLine("exception: " + ex1); }


public static void zIpDatabseFile(string srcPath, string destPath) {//This is for Zip a File using (var source = new FileStream(srcPath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var dest = new FileStream(destPath, FileMode.OpenOrCreate, FileAccess.Write)) using (var zip = new GZipStream(dest, CompressionMode.Compress)) { source.CopyTo(zip); } } public static void uNzIpDatabaseFile(string SrcPath, string DestPath) {// This is for unzip a files. using (var source = new FileStream(SrcPath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var dest = new FileStream(DestPath, FileMode.OpenOrCreate, FileAccess.Write)) using (var zip = new GZipStream(source, CompressionMode.Decompress)) { zip.CopyTo(dest); } }


Un hilo viejo, lo sé, pero me gustaría señalar que .NET 4.5 agregó mejoras extensas a system.io.compression. Ahora puede manipular archivos .zip bastante bien, incluso hasta exponer archivos individuales dentro del archivo comprimido como transmisiones capaces de leer o escribir sin el paso de extraer y comprimir los archivos.


Desde .NET 4.5, Microsoft ha ofrecido la clase ZipArchive al espacio de nombres System.IO.Compression . Sin embargo, a diferencia de otras clases en ese espacio de nombres, como GZipStream y Deflate stream, ZipArchive requiere una referencia al ensamblado System.IO.Compression.dll .

Es bastante simple de usar, y el enlace de arriba a MSDN proporciona algunos buenos ejemplos.

Además, Microsoft ha creado el paquete Microsoft Compression NuGet , que agrega soporte para ZipArchive y clases relacionadas a Windows Phone 8 y otras bibliotecas de clase portátil.