Página 1 de 3

WinrarDLL

Publicado: 15 Nov 2013 16:47
por rafaxplayer
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.

Imagen

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";
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 :


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.
HIDE: ON
Hidebb Message Hidden Description


Espero vuestras sugerencias y bugs sobre el plugin para mejorarlo ;)

Publicado: 15 Nov 2013 17:11
por carsonzillo
muchas gracias mamonazo es un regalo de la ostia jajajaja

Re: WinrarDLL

Publicado: 15 Nov 2013 18:59
por theretard
thanks :)

Publicado: 15 Nov 2013 22:26
por filox
Gracias

Publicado: 15 Nov 2013 23:47
por Pabloko
Con que era esto lo que andabas haciendo. Si tienes 2 dll te recomindo usar ILMERGE o GUILMA para combinarlas en una sola.

buen curro, cada vez mejores trabajos hechos con .net fue todo un descubrimiento eh

Publicado: 16 Nov 2013 05:57
por rafaxplayer
Pues si fue un descubrimiento de tu mano como siempre :num1: :num1: :num1:

Lode combinar dll lo apunto y en próxima versión (Que la habrá , seguro sale alguna mierda de bug XD) lo hago seguro ;)

Hostia! no postee e source , lo pongo ahora :hypno:

Publicado: 16 Nov 2013 06:56
por rafaxplayer
Bueno según he leido ilmerge combina las dll con un exe No? yo he probado a crear una dll desde las dos y me da errores raros XD

Publicado: 16 Nov 2013 13:04
por Arseniy02
gracias

Publicado: 16 Nov 2013 20:02
por Paneitor
Gracias

Publicado: 17 Nov 2013 12:55
por abood1987
thanks rafa

Publicado: 19 Nov 2013 05:10
por Thedary
Gracias rafa, ya no tendré que usar la el unrar.exe

Publicado: 19 Nov 2013 06:44
por rafaxplayer
sep, bueno si solo se trata de extraer es mas como unrar y hay que liarse esto es mejor.

Publicado: 19 Nov 2013 18:11
por Thedary
Veo que si, esto es más como un WinRAR hecho con AMS, la verdad me gusta bastante lo malo es que ustedes tienen la tendencia de hacerlos perfectos y luego dejarlos en el olvido xD, es decir

"ooh tio formatie y se perdieron los fuentes"

:) :)

Publicado: 25 Nov 2013 04:07
por dangngocnguyenit
thanks

Publicado: 26 Nov 2013 16:05
por spiderman
thanks :lol:

Publicado: 01 Dic 2013 01:53
por zero29
quiero probar

Publicado: 13 Dic 2013 16:07
por Haitham.2012
good rafa .. thanks

Publicado: 18 Dic 2013 16:41
por hitec
thanks

Publicado: 18 Dic 2013 19:29
por noadricos
Mi proyecto.iso

Publicado: 12 Ene 2014 00:05
por UnknownData
where is the download link? :normas: