jesuli | Fecha: Miércoles, 2010-05-05, 10:04 PM | Mensaje # 1 |
Teniente
Grupo: Administradores
Mensajes: 77
Estatus: Offline
| Compresión y descompresión de un archivo en C # Métodos para comprimir archivos y descomprimir el archivo usando System.IO.Compression
Método para comprimir un archivo. public void CompressFile ( string sourceFile, string destinationFile ) { // comprobamos si el fichero existe en la ruta de origen if ( File.Exists ( sourceFile ) == false ) throw new FileNotFoundException ( );
// Crear un streams y una array de bytes byte[] buffer = null; FileStream sourceStream = null; FileStream destinationStream = null; GZipStream compressedStream = null;
try
{ // Leer los bytes del archivo de origen en una matriz de bytes sourceStream = new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );
// Leer los valores de la fuente de flujo en el buffer buffer = new byte[sourceStream.Length]; int checkCounter = sourceStream.Read ( buffer, 0, buffer.Length );
if ( checkCounter != buffer.Length ) { throw new ApplicationException ( ); }
//Abrir el FileStream para escribir destinationStream = new FileStream ( destinationFile, FileMode.OpenOrCreate, FileAccess.Write );
//Se crea una compresión de flujo apuntando a flujo de destino compressedStream = new GZipStream ( destinationStream, CompressionMode.Compress, true );
// Ahora escribe los datos comprimidos para el archivo de destino compressedStream.Write ( buffer, 0, buffer.Length );
}
catch ( ApplicationException ex ) { MessageBox.Show ( ex.Message, "Ocurrió un error durante la compresión", MessageBoxButtons.OK, MessageBoxIcon.Error ); }
finally { //Cerramos todos los fluo y objecto if ( sourceStream != null ) sourceStream.Close ( );
if ( compressedStream != null ) compressedStream.Close ( );
if ( destinationStream != null ) destinationStream.Close ( ); } }
Método para descomprimir un archivo. public void DecompressFile ( string sourceFile, string destinationFile ) { //comprobamos que existe el fichero en la ruta de origen if ( File.Exists ( sourceFile ) == false ) throw new FileNotFoundException ( );
// Creamos un fluo y un array de bytes FileStream sourceStream = null; FileStream destinationStream = null; GZipStream decompressedStream = null; byte[] quartetBuffer = null;
try { //Leer en el flujo fuente comprimido sourceStream = new FileStream ( sourceFile, FileMode.Open );
//Se crea una compresión de flujo apuntando a flujo de destino decompressedStream = new GZipStream ( sourceStream, CompressionMode.Decompress, true );
// Leer para determinar la longitud de fichero de destino quartetBuffer = new byte[4]; int position = (int)sourceStream.Length - 4; sourceStream.Position = position; sourceStream.Read ( quartetBuffer, 0, 4 ); sourceStream.Position = 0; int checkLength = BitConverter.ToInt32 ( quartetBuffer, 0 ); byte[] buffer = new byte[checkLength + 100]; int offset = 0; int total = 0;
//Leer los datos comprimidos en el búfer while ( true ) { int bytesRead = decompressedStream.Read ( buffer, offset, 100 ); if ( bytesRead == 0 ) break; offset += bytesRead; total += bytesRead; }
//Ahora escribir en el archivo de destino destinationStream = new FileStream ( destinationFile, FileMode.Create ); destinationStream.Write ( buffer, 0, total );
//Vaciar para limpiar el buffer destinationStream.Flush ( );
}
catch ( ApplicationException ex ) { MessageBox.Show ( ex.Message, "Ocurrió un error durante la compresión", MessageBoxButtons.OK, MessageBoxIcon.Error ); }
finally { // Cerramos todos los objecto y fluo abierto if ( sourceStream != null ) sourceStream.Close ( );
if ( decompressedStream != null ) decompressedStream.Close ( );
if ( destinationStream != null ) destinationStream.Close ( ); }
} |
[center][/center] http://www.codigocero.ucoz.es
|
|
| |