Saludos gente en vista de que El action plugin de winrar dejo de actualizarse desde ams7 , aqui os traigo esta dll para tratar archivos rar en ams8.

Requerimentos:
La dll esta basada en la libreria SharpCompress para su uso requerimos de esta también.
Es necesario Net framework 4.
Funciones:
- RarGetContents(string sourcepath)
Esta función solo requiere el parametro a la ruta del archivo rar .
Retorno:
Retorna un json(string) con las propiedades de cada archivo contenido en el rar.
Propiedades de archivo(json)
.Name(string) Nombre del archivo
.Path (string) Ruta al archivo en relacion al contenido del rar.
.Size(long) Tamaño del archivo.
.IsFolder(Boolean) verifica si es o no un directorio.
.IsEncrypetd(Boolean) verifica si es o no un archivo encryptado.
.LastModified(DateTime) Ultima modificación.
.LastAccessed(DateTime) Último acceso.
.ArchivedTime(DateTime) Obvio...
.CreatedTime (DateTime) Mas Obviedad...
.Crc(string) código crc del archivo.
Para tratar el json en mas podéis utilizar el plugin JSON o algún modulo de json.
Ejem : http://json.luaforge.net/
- RarExtractAll(string sourcepath, String destinationpath)
Función para extraer todo el contenido del rar en un directorio concreto, requiere dos parametros archivo de salida y directorio de destino.
Retorno:
Retorna el string "Succes"en caso de extracción exitosa , en caso de error una cadena con el mensaje de error.
- RarExtractFiles(string sourcepath,string filenames, string destinationpath)
Función para extraer archivos especificos del contenido del rar , requiere tres parámetros: archivo de salida ,cadena con delimitador ',' en caso de múltiples archivos y directorio de destino.
Retorno:
Retorna el string "Succes"en caso de extracción exitosa , en caso de error una cadena con el mensaje de error.
- RarExtractFiles(string sourcepath,string filenames, string destinationpath)
Funcion para extraer archivos expecificos del rar , tres parámetros : ruta del archivo rar de salida , string con el nombre del archivo o si se trata de multiples archivos una cadena con los nombres delimitados por ',' ejemplo:
Retorno:
Retorna el string "Succes"en caso de extracción exitosa , en caso de error una cadena con el mensaje de error.
- RarFilesCount(string sourcepath)
Obtiene el numero de archivos contenidos en el rar, como parámetro único la ruta al rar.
Retorno:
(number) Numero de archivos contenidos.
- RarIsMultipart(string sourcepath)
Verifica si el archivo rar es un archivo particionado, como parámetro único la ruta al rar.
Retorno:
(number) 1 si es archivo particionado 0 si no le es.
- RarFilesCount(string sourcepath)
Obtiene el numero de archivos contenidos en el rar, como parámetro único la ruta al rar.
Retorno:
(number) Numero de archivos contenidos.
- RarMultipartCount(string sourcepath)
En caso de ser archivo particionado , obtenemos el numero de partes, como parámetro único la ruta al rar.
Retorno:
(number) numero de partes.
Notas:
Como tarea pendiente RarExtractFiles no puede extraer un directorio con su contenido , en próximas versiones lo implementare.
Source Code :
Descarga:-- El apz contiene las dos dll necesarias y una libreria de json por si queréis usar este metodo.
Espero vuestras sugerencias y bugs sobre el plugin para mejorarlo

Requerimentos:
La dll esta basada en la libreria SharpCompress para su uso requerimos de esta también.
Es necesario Net framework 4.
Funciones:
- RarGetContents(string sourcepath)
Esta función solo requiere el parametro a la ruta del archivo rar .
Retorno:
Retorna un json(string) con las propiedades de cada archivo contenido en el rar.
Propiedades de archivo(json)
.Name(string) Nombre del archivo
.Path (string) Ruta al archivo en relacion al contenido del rar.
.Size(long) Tamaño del archivo.
.IsFolder(Boolean) verifica si es o no un directorio.
.IsEncrypetd(Boolean) verifica si es o no un archivo encryptado.
.LastModified(DateTime) Ultima modificación.
.LastAccessed(DateTime) Último acceso.
.ArchivedTime(DateTime) Obvio...
.CreatedTime (DateTime) Mas Obviedad...
.Crc(string) código crc del archivo.
Para tratar el json en mas podéis utilizar el plugin JSON o algún modulo de json.
Ejem : http://json.luaforge.net/
- RarExtractAll(string sourcepath, String destinationpath)
Función para extraer todo el contenido del rar en un directorio concreto, requiere dos parametros archivo de salida y directorio de destino.
Retorno:
Retorna el string "Succes"en caso de extracción exitosa , en caso de error una cadena con el mensaje de error.
- RarExtractFiles(string sourcepath,string filenames, string destinationpath)
Función para extraer archivos especificos del contenido del rar , requiere tres parámetros: archivo de salida ,cadena con delimitador ',' en caso de múltiples archivos y directorio de destino.
Retorno:
Retorna el string "Succes"en caso de extracción exitosa , en caso de error una cadena con el mensaje de error.
- RarExtractFiles(string sourcepath,string filenames, string destinationpath)
Funcion para extraer archivos expecificos del rar , tres parámetros : ruta del archivo rar de salida , string con el nombre del archivo o si se trata de multiples archivos una cadena con los nombres delimitados por ',' ejemplo:
filenames="archivo.exe,archivo.pdf,archivo.doc";
Retorna el string "Succes"en caso de extracción exitosa , en caso de error una cadena con el mensaje de error.
- RarFilesCount(string sourcepath)
Obtiene el numero de archivos contenidos en el rar, como parámetro único la ruta al rar.
Retorno:
(number) Numero de archivos contenidos.
- RarIsMultipart(string sourcepath)
Verifica si el archivo rar es un archivo particionado, como parámetro único la ruta al rar.
Retorno:
(number) 1 si es archivo particionado 0 si no le es.
- RarFilesCount(string sourcepath)
Obtiene el numero de archivos contenidos en el rar, como parámetro único la ruta al rar.
Retorno:
(number) Numero de archivos contenidos.
- RarMultipartCount(string sourcepath)
En caso de ser archivo particionado , obtenemos el numero de partes, como parámetro único la ruta al rar.
Retorno:
(number) numero de partes.
Notas:
Como tarea pendiente RarExtractFiles no puede extraer un directorio con su contenido , en próximas versiones lo implementare.
Source Code :
namespace winrardllams
{
public class Class1
{
[DllExport("RarExtractAll", CallingConvention = CallingConvention.StdCall)]
static String RarExtractAll(String sourcerar, String destinationpath)
{
try
{
if (!RarArchive.IsRarFile(sourcerar))
{
return "Invalid File";
}
using (RarArchive archive = RarArchive.Open(sourcerar))
{
archive.WriteToDirectory(destinationpath, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
return "Succes";
}
}
catch (ExtractionException ex)
{
return "Error extraction:" + ex;
}
catch (Exception ex)
{
return "Error exception:" + ex;
}
}
[DllExport("RarExtractFiles", CallingConvention = CallingConvention.StdCall)]
static String RarExtractFiles(String sourcerar, String filenames, String destinationpath)
{
string ret;
try
{
if (!RarArchive.IsRarFile(sourcerar))
{
return "Error : Invalid Source File"; ;
}
using (RarArchive archive = RarArchive.Open(sourcerar))
{
String[] splFilenames = filenames.Split(new Char[]{','});
foreach (string filename in splFilenames)
{
foreach (RarArchiveEntry entry in archive.Entries)
{
if (Path.GetFileName(entry.FilePath) == filename)
{
entry.WriteToDirectory(destinationpath, ExtractOptions.Overwrite);
}
}
}
ret= "Succes";
}
}
catch (ExtractionException ex)
{
ret="Error :" + ex;
}
catch (Exception ex)
{
ret="Error :" + ex;
}
return ret;
}
[DllExport("RarGetContents", CallingConvention = CallingConvention.StdCall)]
static String RarGetContents(String sourcerar)
{
string json;
try
{
if (!RarArchive.IsRarFile(sourcerar))
{
return "{\"error\":\"Invalid File\"}";
}
using (RarArchive archive = RarArchive.Open(sourcerar))
{
List<EntryProps> lst = new List<EntryProps>();
foreach (RarArchiveEntry entry in archive.Entries)
{
EntryProps flp = new EntryProps();
flp.Name = Path.GetFileName(entry.FilePath.ToString());
flp.Path = entry.FilePath.ToString();
flp.Size = entry.Size;
flp.LastModified = entry.LastModifiedTime.ToString();
flp.ArchivedTime = entry.ArchivedTime.ToString();
flp.Crc = entry.Crc.ToString();
flp.CreatedTime = entry.CreatedTime.ToString();
flp.LastAccessed = entry.LastAccessedTime.ToString();
flp.IsEncrypted = entry.IsEncrypted;
flp.IsFolder = entry.IsDirectory;
flp.CompresedSize = entry.CompressedSize;
lst.Add(flp);
}
json = new JavaScriptSerializer().Serialize(lst);
}
}
catch (Exception e)
{
json = "{\"error\":\"" + e.Message + "\"}";
}
return json;
}
[DllExport("RarIsMultipart", CallingConvention = CallingConvention.StdCall)]
static int RarIsMultipart(String sourcerar)
{
int b = 0;
if (RarArchive.IsRarFile(sourcerar))
{
b = RarArchive.Open(sourcerar).IsMultipartVolume() ? 1 : 0;
}
return b;
}
[DllExport("RarMultipartCount", CallingConvention = CallingConvention.StdCall)]
static int RarMultipartCount(String sourcerar)
{
int b = 0;
if (RarArchive.IsRarFile(sourcerar) && RarArchive.Open(sourcerar).IsMultipartVolume())
{
b = RarArchive.Open(sourcerar).Volumes.Count;
}
return b;
}
[DllExport("RarFilesCount", CallingConvention = CallingConvention.StdCall)]
static int RarFilesCount(String sourcerar)
{
int b = 0;
if (RarArchive.IsRarFile(sourcerar))
{
b = RarArchive.Open(sourcerar).Entries.Count;
}
return b;
}
[DllExport("RarIsRarFile", CallingConvention = CallingConvention.StdCall)]
static int RarIsRarFile(String sourcerar)
{
return RarArchive.IsRarFile(sourcerar) ? 1 : 0;
}
[DllExport("RarTotalSize", CallingConvention = CallingConvention.StdCall)]
static long RarTotalSize(String sourcerar)
{
long lng = 0;
if (RarArchive.IsRarFile(sourcerar))
{
lng = RarArchive.Open(sourcerar).TotalSize;
}
return lng;
}
public class EntryProps
{
public string Name { get; set; }
public string Path { get; set; }
public long Size { get; set; }
public bool IsFolder { get; set; }
public bool IsEncrypted { get; set; }
public string LastModified { get; set; }
public string LastAccessed { get; set; }
public long CompresedSize { get; set; }
public string ArchivedTime { get; set; }
public string CreatedTime { get; set; }
public string Crc { get; set; }
}
}
}
Descarga:-- El apz contiene las dos dll necesarias y una libreria de json por si queréis usar este metodo.
Espero vuestras sugerencias y bugs sobre el plugin para mejorarlo
