Comprimir y Extraer archivos






Esta clase representa el formato de datos gzip, que utiliza un algoritmo estándar del sector para archivos sin pérdidas de compresión y descompresión.El formato incluye un valor de comprobación de la prueba cíclica de redundancia para detectar daños en los datos. El formato de datos gzip utiliza el mismo algoritmo que la DeflateStream clase, pero se puede extender para utilizar otros formatos de compresión.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Compression;
using System.IO;


namespace GZipStream_I
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)//Comprimir
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Compresion(ofd.FileName);
}
}

private void button2_Click(object sender, EventArgs e)//Descomprimir
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Descompresion(ofd.FileName);
}

}

public static void Compresion(string NombreArchivo)
{
FileStream Archivo;
try
{
// Leemos el archivo a comprimir
Archivo = new FileStream(NombreArchivo, FileMode.Open, FileAccess.Read,                                     FileShare.Read);

//Definimos el buffer con el tamaño del archivo
byte[] btBuffer = new byte[Archivo.Length];

//Almacenamos los bytes del archivo en el buffer
int intCount = Archivo.Read(btBuffer, 0, btBuffer.Length);
Archivo.Close();

//Definimos el nuevo stream que nos va a permitir grabar el zip
FileStream Salida = new FileStream(NombreArchivo + ".zip", FileMode.Create,                                   FileAccess.Write);

//Rutina de compresion usando GZipStream
GZipStream gzsArchivo = new GZipStream(Salida,                                                                                 CompressionMode.Compress, true);

//Escribimos el resultado
gzsArchivo.Write(btBuffer, 0, btBuffer.Length);
gzsArchivo.Close();

//Cerramos el archivo
Salida.Flush();
Salida.Close();

MessageBox.Show("Compresion realizada correctamente al archivo: " +                                               NombreArchivo + ".zip");
}
catch (Exception ex)
{
MessageBox.Show("Ocurrió un error al comprimir: " + ex.Message);

}
}





public static void Descompresion(string NombreArchivo)
{
FileStream Archivo;
try
{
//Leemos archivo a descomprimir
Archivo = new FileStream(NombreArchivo, FileMode.Open, FileAccess.Read,                                     FileShare.Read);
GZipStream gzsArchivo = new GZipStream(Archivo,                                                                             CompressionMode.Decompress);

//Codigo implementado para conocer las dimensiones que va a tener nuestro                                        buffer, acumulativo.
int offset = 0;
int intCountBytes = 0;
byte[] btSmallBuffer = new byte[100];
while (true)
{
int bytesRead = gzsArchivo.Read(btSmallBuffer, 0, 100);
if (bytesRead == 0)
{
break;
}
offset += bytesRead;
intCountBytes += bytesRead;
}
//Creamos el buffer con el tamaño requerido
byte[] buffer = new byte[intCountBytes];

//Leemos el contenido del archivo comprimido al buffer
Archivo = new FileStream(NombreArchivo, FileMode.Open, FileAccess.Read,                                     FileShare.Read);
gzsArchivo = new GZipStream(Archivo, CompressionMode.Decompress);
int intCount = gzsArchivo.Read(buffer, 0, intCountBytes);
gzsArchivo.Close();

//Escribimos la salida a un nuevo archivo, ya descomprimido
FileStream Salida = new FileStream(NombreArchivo.Substring(0,                                                         NombreArchivo.Length - 4), FileMode.Create, FileAccess.Write);
Salida.Write(buffer, 0, intCountBytes);
Salida.Flush();
Salida.Close();

MessageBox.Show("Descompresion realizada correctamente al archivo: " +                                         NombreArchivo.Substring(0, NombreArchivo.Length - 4) + ".zip");

}
catch (Exception ex)
{
MessageBox.Show("Ocurrió un error al descomprimir: " + ex.Message);

}
}
}
}




https://msdn.microsoft.com/es-es/library/system.io.compression.gzipstream(v=vs.110).aspx

https://msdn.microsoft.com/es-es/library/ms404280(v=vs.110).aspx

https://msdn.microsoft.com/es-es/library/ms404280(v=vs.100).aspx

http://ourresource.blogspot.com.es/2012/02/creating-zip-files-with-password-using.html

https://sistema7.wordpress.com/2009/09/24/compresion-y-descompresion-en-el-net-framework-2-03-0-y-3-5/

http://geeks.ms/imostacero/2006/12/22/compresion-y-descompresion-en-el-net-framework-2-0/

http://www.faqs.org/rfcs/rfc1951.html


No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.