Sábado, 2024-11-23, 4:50 AM
Le saludo visitante | RSS
[ Mensajes nuevos · Participantes · Reglas del foro · Búsqueda · RSS ]
NUEVO TEMA CREADO
este foro ya no estar en su mantenimiento no mudamos a la siguiente dirección

www.inforprograma.net

  • Página 1 de 1
  • 1
Compresión y descompresión de un archivo en C #
jesuliFecha: 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
 
  • Página 1 de 1
  • 1
Búscar:

Usuario Que ha Visitado el sitio
Copyright MyCorp © 2024
Sitio administrado por el sistema de uCoz