Descomprimir RAR (Nunrar)

Iniciado por rigorvzla, 13 Octubre 2020, 11:59 AM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

hola a migos buen dia, hoy les traigo una inquietud y es que no encuentro como hacer funcionar este codigo.

string ruta = Environment.CurrentDirectory + "\\" + "r.rar";
            RarArchive archive = RarArchive.Open(ruta);

            foreach (RarArchiveEntry item in archive.Entries)
            {
                string path = Path.Combine(Path.GetFileName(item.FilePath));
                item.WriteToFile(path);
            }


el error que me arroja es:

System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.' (Eto ocurre al entrar al foreach en la instancia archive.Entries)

y no eh dado de como solucionarlo, si alguien sabe , espero pueda ayudarme.

PD. gracias de antemano, y en caso de conocer otra api gratuita para descomprimir RAR y de facil uso sin problemas , espero puedan hacerla conocer, gracias.

**Aincrad**

#1
Cita de: rigorvzla en 13 Octubre 2020, 11:59 AM
hola a migos buen dia, hoy les traigo una inquietud y es que no encuentro como hacer funcionar este codigo.

string ruta = Environment.CurrentDirectory + "\\" + "r.rar";
           RarArchive archive = RarArchive.Open(ruta);

           foreach (RarArchiveEntry item in archive.Entries)
           {
               string path = Path.Combine(Path.GetFileName(item.FilePath));
               item.WriteToFile(path);
           }


el error que me arroja es:

System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.' (Eto ocurre al entrar al foreach en la instancia archive.Entries)


Es obio, el error esta en esta declaracion :

RarArchive archive = RarArchive.Open(ruta);

Para trabajar tienes que declarar una nueva instancia. Te explico con codigo vb.net.





Basicamente declaras una nueva instancia de RarArchive , usando (new) , quedaria asi :

Código (vbnet) [Seleccionar]
  Dim ruta As String = Environment.CurrentDirectory & "\" & "r.rar"

   Dim archiveInstance As new RarArchive
    Dim archive = archiveInstance.Open(ruta)

   For Each item As RarArchiveEntry In archive.Entries
       Dim path As String = Path.Combine(Path.GetFileName(item.FilePath))
       item.WriteToFile(path)
   Next


No se que tipo devuelve .Open(ruta) en caso de que sea string. ponedlo en la variable archive.




Asi quedaria tu code :

{
   string ruta = Environment.CurrentDirectory + @"\" + "r.rar";

   RarArchive archiveInstance = new RarArchive();
   var archive = archiveInstance.Open(ruta);

   foreach (RarArchiveEntry item in archive.Entries)
   {
       string path = Path.Combine(Path.GetFileName(item.FilePath));
       item.WriteToFile(path);
   }
}






rigorvzla

hola de nuevo, gracias por la respuesta pero, eso que se me ocurrio por ser "obvio" no resulto, por alguna razon me tilda error (visual studios), lo peor es que en el ejemplo del api sale eso tal cual, por eso ni idea de si realmente funcione