39 mensajes Página 1 de 2
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";
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


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; }
        }



    }

}
 
Parsed in 0.016 seconds, using GeSHi 1.0.8.9


Descarga:-- El apz contiene las dos dll necesarias y una libreria de json por si queréis usar este metodo.
Contenido Oculto: ON
	<br />Usted necesita responder en este tema para ver el contenido oculto.


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

muchas gracias mamonazo es un regalo de la ostia jajajaja
thanks :)

Gracias

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
ImagenImagenImagenImagen

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:

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

gracias

Gracias

thanks rafa
Imagen

Gracias rafa, ya no tendré que usar la el unrar.exe
Imagen
Imagen

Si quieres puedes apoyar el chat de la comunidad de amsspecilist

sep, bueno si solo se trata de extraer es mas como unrar y hay que liarse esto es mejor.

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"

:) :)
Imagen
Imagen

Si quieres puedes apoyar el chat de la comunidad de amsspecilist

thanks

thanks :lol:

quiero probar

good rafa .. thanks

thanks

Mi proyecto.iso

where is the download link? :normas:
39 mensajes Página 1 de 2

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron