Developer's Diary

19 agosto, 2010

Descomprimir archivos rar C#

Hace unos pocos días, comencé a darle vueltas a un nuevo proyecto para desarrollar en Windows Mobile donde necesitaba descomprimir archivos que se encontraran en .rar

Buscando por la red, no encontré ningún atisbo de como realizar esta tarea en .Net que me sedujera lo bastante. Sin embargo…

Caí en la página  de Winrar, para mi sorpresa dentro de la página de Winrar se encontraba el antiguo Unrar, ese programa que hace muchos años usabamos en nuestros Ms-Dos para descomprimir ficheros en este conocido formato de compresión.

Si no fuera bastante interesante este detalle, empiezo a mirar esa página de descargas y compruebo que se puede bajar el fuente del mismo código. Agotado de mi búsqueda, deje el ordenador,no sin antes guardar esa página en favoritos. Me fue a hacer otras tareas sin dejar de pensar como podría realizar mi cometido gracias a ese descubrimiento. Podría compilar el fuente que seguramente se encontrará en C++ y convertirlo en una .dll que luego consumiría desde .Net.

Al día siguiente, cuando volvía al tema, entré en la página, me fije que el trabajo de compilarlo a una libreria se encontraba hecho, compruebo que se encuentran ejemplos en distintos lenguajes de programación y puedo ver como el código fuente ha sido portado a diferentes lenguajes, entre ellos C#.

Por lo que me puse manos a la obra sin dudarlo dos veces.

El fichero que nos descargamos, es un ejecutable que nos genera una carpeta donde se encuentran todos los ejemplos con los distintos lenguajes, en este caso vamos a tomar el de C# por supuesto. Dentro de esa carpeta existe un ejemplo, pero es un poco más complejo que el que os voy a indicar en esta entrada.

Cuando vayamos a usar la clase Unrar dentro de uno de nuestros proyectos debemos recordar que se debe incluir el fichero de la clase, evidentemente y también debeis incluir la librería Unrar.dll, se encuentra tanto en la página de descargas que indique anteriormente, como podeis descargarla aparte y también se encuentra en el ejemplo del código fuente que os voy a pasar.

La inclusión de la libreria se debe a que, la clase hace llamadas a la dll, muy similares a las llamadas para ejecutar código de la API de Windows.

El uso de la clase es extremadamente fácil, en este ejemplo os voy a enseñar a abrir el fichero y descomprimirlo, pero también nos permite abrir la cabecera del mismo y mostrar los ficheros que contiene el archivo, para poder descargar los que solo nos interesan. Para extenderos más en el uso de la clase, os recomiendo que veais los ejemplos que vienen integrados.

Para poder descomprimir un archivo solo tenemos que hacer lo siguiente:

public void Descomprimir(string Filename , string Destination)

{

Unrar rar = new Unrar();  //Instanciamos nuestra clase

rar.open(filename , Unrar.OpenMode.Extract);  //Abrimos el fichero en cuestión.

rar.DestinationPath = Destination; //Indicamos el destino

while(rar.ReadHeader()) //Mientras sigamos leyendo

{

rar.extract(); // Descomprimimos

}

}

Así de fácil, no hay que hacer absolutamente nada más. Para un correcto funcionamiento, lo lógico sería tener cierta comprobación de errores, es decir, comprobar la ruta del fichero, del destino de la carpeta.  Para extenderos más en el uso de la librería recomiendo encarecidamente que veáis los ejemplos incluidos dentro del archivo o aún mejor, investigar la libreria por vosotros mismos.

Por último, otro detalle interesante del paquete de librerias, también tenemos la dll para sistemas x64. No la he podido testear, pero deduzco que las invocaciones a la dll serán idénticas y por lo tanto no habrá que realizar ningún tipo de modificación.

Saludos!

Anuncios

10 comentarios »

  1. Podrías volver a subir tu código fuente.
    Gracias!!!!

    Comentario por Lázaro — 1 mayo, 2012 @ 9:46 PM

  2. hola realice todo como lo mencionas y funciona perfectamente muchas gracias, solo que yo quise agregar la DLL en mi aplicación dándolo click derecho en la carpeta de Referencias y agregar nueva referencia y me marco un erro me decía que no es accesible,cheque los permisos y si tenia los permisos, lo que realice fue copiar directamente en mi aplicación el DLL y con eso se SOLUCIONO gracias paz y buena vibra!!!

    Comentario por oscar — 20 junio, 2012 @ 11:14 PM

    • Me alegro de que hayas encontrado la solución y la hayas compartido aquí. Muchas gracias. Un saludo.

      Comentario por 3nk1 — 21 junio, 2012 @ 6:49 AM

    • Como lo agregaste ???

      Comentario por akua — 23 agosto, 2013 @ 5:33 AM

  3. y para comprimirlos en c# como lo hago

    Comentario por Gerson jair — 3 noviembre, 2012 @ 1:49 AM

  4. Hola, un favor, puedes decirme como es que agregaste la DLL a tu proyecto ?????

    Comentario por akua — 23 agosto, 2013 @ 5:32 AM

    • Hola akua,

      La libreria no se agrega como tal, como ocurre con las librerias de .Net. En este caso es una libreria seguramente desarrollada en C y tienes que realizar un p/Invoke. Como comento en el post hay unos ejemplos de código http://www.rarlab.com/rar/UnRARDLL.exe. Ahí encontraras uno para C# en concreto con una clase llamada Unrar esa clase contiene todas las declaraciones a la libreria. Para que funcione correctamente, la misma tiene que estar donde se encuentre el ejecutable.

      Por cierto nos hemos mudado a http://devthisblog.namocode.es/ porque no dejas tu respuesta de como te fue en el mismo artículo con este nombre. http://devthisblog.namocode.es/index.php/descomprimir-archivos-rar-c/

      Un saludo y happy coding.

      Comentario por 3nk1 — 23 agosto, 2013 @ 7:47 AM

  5. Una consulta me sale este error, a pesar de haber invocado a la unrar.dll, Excepción de HRESULT: 0x8007007E 😦

    Comentario por cristian — 15 enero, 2015 @ 3:51 PM

  6. Reciba un cordial saludo. Podría por favor darme un ejemplo de como usar unrar.dll en c# en un archivo comprimido que tenga contraseña.
    Nota:Yo tengo la contraseña del archivo a descomprimir

    Comentario por wilson cervantes — 9 febrero, 2015 @ 11:16 PM

  7. Hola.
    como se indica aquí incluí la clase, la invoque en mi codigo. Sin embargo cuando la ejecuté me genero el siguiente error:

    “No se puede cargar el archivo DLL ‘UNRAR.DLL’: No se puede encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)”

    Este se presenta el la clase “Unrar” en la linea
    504– // Open archive
    505– handle=Unrar.RAROpenArchiveEx(ref openStruct);

    ¿alguna idea de por que puede llegar a presentarse este caso?

    Agradezco cualquier indicación.

    Comentario por Nicolas ss — 17 febrero, 2015 @ 3:31 PM


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: