Exemple #1
0
        List <PropiedadesArchivo> LeerMisCompresiones()
        {
            var    Lista        = new List <PropiedadesArchivo>();
            string archivoLeer  = string.Empty;
            string ArchivoMapeo = Server.MapPath("~/App_Data/");

            archivoLeer = ArchivoMapeo + Path.GetFileName("ListaCompresiones");
            PropiedadesArchivo Prueba = new PropiedadesArchivo();

            GuaradarCompresiones(Prueba);
            using (var Lectura = new StreamReader(archivoLeer))
            {
                while (!Lectura.EndOfStream)
                {
                    var Cadena   = Lectura.ReadLine();
                    var Auxiliar = new PropiedadesArchivo
                    {
                        NombreArchivoOriginal      = Cadena.Split('|')[0],
                        TamanoArchivoComprimido    = Convert.ToDouble(Cadena.Split('|')[2]),
                        TamanoArchivoDescomprimido = Convert.ToDouble(Cadena.Split('|')[1]),
                        RazonCompresion            = Convert.ToDouble(Cadena.Split('|')[4]),
                        FactorCompresion           = Convert.ToDouble(Cadena.Split('|')[3]),
                        PorcentajeReduccion        = Cadena.Split('|')[5],
                        FormatoCompresion          = Cadena.Split('|')[6]
                    };
                    Lista.Add(Auxiliar);
                }
            }
            return(Lista);
        }
Exemple #2
0
        void GuaradarCompresiones(PropiedadesArchivo Archivo)
        {
            string archivoLeer  = string.Empty;
            string ArchivoMapeo = Server.MapPath("~/App_Data/");

            archivoLeer = ArchivoMapeo + Path.GetFileName("ListaCompresiones");
            using (var writer = new StreamWriter(archivoLeer, true))
            {
                if (!(Archivo.TamanoArchivoComprimido <= 0 && Archivo.TamanoArchivoDescomprimido <= 0))
                {
                    writer.WriteLine(Archivo.NombreArchivoOriginal + "|" + Archivo.TamanoArchivoDescomprimido + "|" + Archivo.TamanoArchivoComprimido + "|" + Archivo.FactorCompresion + "|" + Archivo.RazonCompresion + "|" + Archivo.PorcentajeReduccion + "|" + Archivo.FormatoCompresion);
                }
            }
        }
Exemple #3
0
        public ActionResult CompresionLZWImportar(HttpPostedFileBase ArchivoImportado)
        {
            Dictionary <string, int> DiccionarioLZWCompresion = new Dictionary <string, int>();

            Directory.CreateDirectory(Server.MapPath("~/App_Data/ArchivosImportados/"));
            Directory.CreateDirectory(Server.MapPath("~/App_Data/Compresiones/"));
            var DireccionArchivo = string.Empty;
            var ArchivoMapeo     = Server.MapPath("~/App_Data/ArchivosImportados/");

            DireccionArchivo = ArchivoMapeo + Path.GetFileName(ArchivoImportado.FileName);
            var extension = Path.GetExtension(ArchivoImportado.FileName);

            ArchivoImportado.SaveAs(DireccionArchivo);
            var      PropiedadesArchivoActual = new PropiedadesArchivo();
            FileInfo ArchivoAnalizado         = new FileInfo(DireccionArchivo);

            PropiedadesArchivoActual.TamanoArchivoDescomprimido = ArchivoAnalizado.Length;
            PropiedadesArchivoActual.NombreArchivoOriginal      = ArchivoAnalizado.Name;
            nombreArchivo = ArchivoAnalizado.Name.Split('.')[0];
            var listaCaracteresExistentes = new List <byte>();
            var listaCaracteresEscribir   = new List <int>();
            var listaCaracteresBinario    = new List <string>();

            using (var Lectura = new BinaryReader(ArchivoImportado.InputStream))
            {
                using (var writeStream = new FileStream(Server.MapPath(@"~/App_Data/Compresiones/" + nombreArchivo + ".lzw"), FileMode.OpenOrCreate))
                {
                    using (var writer = new BinaryWriter(writeStream))
                    {
                        var byteBuffer = new byte[bufferLength];
                        while (Lectura.BaseStream.Position != Lectura.BaseStream.Length)
                        {
                            byteBuffer = Lectura.ReadBytes(bufferLength);
                            foreach (var item in byteBuffer)
                            {
                                if (!listaCaracteresExistentes.Contains(item))
                                {
                                    listaCaracteresExistentes.Add(item);
                                }
                            }
                        }
                        listaCaracteresExistentes.Sort();
                        foreach (var item in listaCaracteresExistentes)
                        {
                            var caractreres = Convert.ToChar(item);
                            DiccionarioLZWCompresion.Add(caractreres.ToString(), DiccionarioLZWCompresion.Count + 1);
                        }
                        var TamanoDiccionario = Convert.ToString(DiccionarioLZWCompresion.LongCount()) + ".";
                        writer.Write(TamanoDiccionario.ToCharArray());
                        Lectura.BaseStream.Position = 0;
                        var CaracterActual = string.Empty;
                        var Output         = string.Empty;
                        while (Lectura.BaseStream.Position != Lectura.BaseStream.Length)
                        {
                            byteBuffer = Lectura.ReadBytes(bufferLength);
                            foreach (byte item in byteBuffer)
                            {
                                var CadenaAnalizada = CaracterActual + Convert.ToChar(item);
                                if (DiccionarioLZWCompresion.ContainsKey(CadenaAnalizada))
                                {
                                    CaracterActual = CadenaAnalizada;
                                }
                                else
                                {
                                    listaCaracteresEscribir.Add(DiccionarioLZWCompresion[CaracterActual]);
                                    DiccionarioLZWCompresion.Add(CadenaAnalizada, DiccionarioLZWCompresion.Count + 1);
                                    CaracterActual = Convert.ToChar(item).ToString();
                                }
                            }
                        }
                        listaCaracteresEscribir.Add(DiccionarioLZWCompresion[CaracterActual]);
                        var TamanoTexto = Convert.ToString(DiccionarioLZWCompresion.LongCount()) + ".";
                        writer.Write(TamanoTexto.ToCharArray());
                        foreach (var item in listaCaracteresExistentes)
                        {
                            var Indice = Convert.ToByte(item);
                            writer.Write(Indice);
                        }
                        writer.Write(Environment.NewLine);
                        var mayorIndice     = listaCaracteresEscribir.Max();
                        var bitsMayorIndice = (Convert.ToString(mayorIndice, 2)).Count();
                        writer.Write(bitsMayorIndice.ToString().ToCharArray());
                        writer.Write(extension.ToCharArray());
                        writer.Write(Environment.NewLine);
                        if (mayorIndice > 255)
                        {
                            foreach (var item in listaCaracteresEscribir)
                            {
                                var indiceBinario = Convert.ToString(item, 2);
                                while (indiceBinario.Count() < bitsMayorIndice)
                                {
                                    indiceBinario = "0" + indiceBinario;
                                }
                                listaCaracteresBinario.Add(indiceBinario);
                            }
                            var cadenaBits = string.Empty;
                            foreach (var item in listaCaracteresBinario)
                            {
                                for (int i = 0; i < item.Length; i++)
                                {
                                    if (cadenaBits.Count() < 8)
                                    {
                                        cadenaBits += item[i];
                                    }
                                    else
                                    {
                                        var cadenaDecimal = Convert.ToInt64(cadenaBits, 2);
                                        var cadenaEnByte  = Convert.ToByte(cadenaDecimal);
                                        writer.Write((cadenaEnByte));
                                        cadenaBits  = string.Empty;
                                        cadenaBits += item[i];
                                    }
                                }
                            }
                            if (cadenaBits.Length > 0)
                            {
                                var cadenaRestante = Convert.ToInt64(cadenaBits, 2);
                                writer.Write(Convert.ToByte(cadenaRestante));
                            }
                        }
                        else
                        {
                            foreach (var item in listaCaracteresEscribir)
                            {
                                writer.Write(Convert.ToByte(Convert.ToInt32(item)));
                            }
                        }
                        PropiedadesArchivoActual.TamanoArchivoComprimido = writeStream.Length;
                        PropiedadesArchivoActual.FactorCompresion        = Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoComprimido) / Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoDescomprimido);
                        PropiedadesArchivoActual.RazonCompresion         = Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoDescomprimido) / Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoComprimido);
                        PropiedadesArchivoActual.PorcentajeReduccion     = (Convert.ToDouble(1) - PropiedadesArchivoActual.FactorCompresion).ToString();
                        PropiedadesArchivoActual.FormatoCompresion       = ".lzw";
                        GuaradarCompresiones(PropiedadesArchivoActual);
                    }
                }
            }
            Success(string.Format("Archivo comprimido exitosamente"), true);
            var FileVirtualPath = @"~/App_Data/Compresiones/" + nombreArchivo + ".lzw";

            return(File(FileVirtualPath, "application / force - download", Path.GetFileName(FileVirtualPath)));
        }
Exemple #4
0
        public ActionResult CompresionHImportar(HttpPostedFileBase ArchivoImportado)
        {
            var NodoRaiz = new Nodo();

            Directory.CreateDirectory(Server.MapPath("~/App_Data/ArchivosImportados/"));
            Directory.CreateDirectory(Server.MapPath("~/App_Data/Compresiones/"));
            var archivoLeer  = string.Empty;
            var ArchivoMapeo = Server.MapPath("~/App_Data/ArchivosImportados/");

            archivoLeer = ArchivoMapeo + Path.GetFileName(ArchivoImportado.FileName);
            var extension = Path.GetExtension(ArchivoImportado.FileName);

            ArchivoImportado.SaveAs(archivoLeer);
            //Obtener propiedades del archivo
            var      PropiedadesArchivoActual = new PropiedadesArchivo();
            FileInfo ArchivoAnalizado         = new FileInfo(archivoLeer);

            PropiedadesArchivoActual.TamanoArchivoDescomprimido = ArchivoAnalizado.Length;
            PropiedadesArchivoActual.NombreArchivoOriginal      = ArchivoAnalizado.Name;
            nombreArchivo = ArchivoAnalizado.Name.Split('.')[0];
            //Leer Archivo
            using (var Lectura = new BinaryReader(ArchivoImportado.InputStream))
            {
                var byteBuffer = new byte[bufferLength];
                while (Lectura.BaseStream.Position != Lectura.BaseStream.Length)
                {
                    byteBuffer = Lectura.ReadBytes(bufferLength);
                    IntroducirALista(byteBuffer);
                }
            }
            TotalDeCaracteres          = ListaCaracteresExistentes.Count();
            NodoRaiz.TotalDeCaracteres = TotalDeCaracteres;
            TextoEnBinario             = NodoRaiz.ArmarArbolHuffman(ListaCaracteresExistentes);
            DiccionarioIndices         = NodoRaiz.DiccionarioIndices;

            while (TextoEnBinario.Length % 8 != 0)
            {
                TextoEnBinario += "0";
            }
            //Escritura Huffman
            using (var writeStream = new FileStream(Server.MapPath(@"~/App_Data/Compresiones/" + nombreArchivo + ".huff"), FileMode.OpenOrCreate))
            {
                using (var writer = new BinaryWriter(writeStream))
                {
                    writer.Write(ArchivoAnalizado.Name.ToCharArray());
                    var Txt = "." + TotalDeCaracteres.ToString();
                    writer.Write(Txt.ToCharArray());
                    writer.Write(Environment.NewLine);
                    foreach (var item in DiccionarioIndices)
                    {
                        var Texto = Convert.ToInt64(item.Value) + "&" + item.Key + "|";
                        writer.Write(Texto.ToCharArray());
                    }
                    writer.Write(Environment.NewLine);
                    var byteBuffer2    = new byte[bufferLength];
                    var contadorBits   = 0;
                    var contadorBuffer = 0;
                    var contador       = 0;
                    var TextoenByte    = "";
                    while (contador != TextoEnBinario.Length)
                    {
                        TextoenByte += TextoEnBinario[contador];
                        contadorBits++;
                        if (contadorBits == 8)
                        {
                            if (contadorBuffer == bufferLength)
                            {
                                for (int i = 0; i < bufferLength; i++)
                                {
                                    writer.Write(byteBuffer2[i]);
                                }
                                byteBuffer2    = new byte[bufferLength];
                                contadorBuffer = 0;
                                byteBuffer2[contadorBuffer] = Convert.ToByte(TextoenByte, 2);
                                contadorBuffer++;
                                contadorBits = 0;
                                TextoenByte  = "";
                            }
                            else
                            {
                                byteBuffer2[contadorBuffer] = Convert.ToByte(TextoenByte, 2);
                                contadorBuffer++;
                                contadorBits = 0;
                                TextoenByte  = "";
                                if (contador == TextoEnBinario.Length - 1)
                                {
                                    for (int i = 0; i < bufferLength; i++)
                                    {
                                        writer.Write(byteBuffer2[i]);
                                    }
                                }
                            }
                        }
                        contador++;
                    }
                    PropiedadesArchivoActual.TamanoArchivoComprimido = writeStream.Length;
                    PropiedadesArchivoActual.FactorCompresion        = Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoComprimido) / Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoDescomprimido);
                    PropiedadesArchivoActual.RazonCompresion         = Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoDescomprimido) / Convert.ToDouble(PropiedadesArchivoActual.TamanoArchivoComprimido);
                    PropiedadesArchivoActual.PorcentajeReduccion     = (Convert.ToDouble(1) - PropiedadesArchivoActual.FactorCompresion).ToString();
                    PropiedadesArchivoActual.FormatoCompresion       = ".huff";

                    GuaradarCompresiones(PropiedadesArchivoActual);
                }
            }
            Success(string.Format("Archivo comprimido exitosamente"), true);
            var FileVirtualPath = @"~/App_Data/Compresiones/" + nombreArchivo + ".huff";

            return(File(FileVirtualPath, "application / force - download", Path.GetFileName(FileVirtualPath)));
        }