Exemple #1
0
        public void CompresionLZWImportar(FileStream ArchivoImportado)
        {
            Dictionary <string, int> LZWdiccionario = new Dictionary <string, int>();
            var      extension = Path.GetExtension(ArchivoImportado.Name);
            var      nombre    = Path.GetFileName(ArchivoImportado.Name).Replace("EXPORTADO_", "");
            var      PropiedadesArchivoActual = new MiArchivo();
            FileInfo ArchivoAnalizado         = new FileInfo(ArchivoImportado.Name);

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

            using (var Lectura = new BinaryReader(ArchivoImportado))
            {
                using (FileStream writeStream = new FileStream((@"TusArchivos/IMPORTADO_" + nombreArchivo + ".lzw"), FileMode.OpenOrCreate))
                {
                    using (BinaryWriter 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);
                            LZWdiccionario.Add(caractreres.ToString(), LZWdiccionario.Count + 1);
                        }
                        var diccionarioTam = Convert.ToString(LZWdiccionario.LongCount()) + ".";
                        writer.Write(diccionarioTam.ToCharArray());
                        Lectura.BaseStream.Position = 0;
                        var thisCaracter = string.Empty;
                        var myOutput     = string.Empty;
                        while (Lectura.BaseStream.Position != Lectura.BaseStream.Length)
                        {
                            byteBuffer = Lectura.ReadBytes(bufferLength);
                            foreach (byte item in byteBuffer)
                            {
                                var toAnalizar = thisCaracter + Convert.ToChar(item);
                                if (LZWdiccionario.ContainsKey(toAnalizar))
                                {
                                    thisCaracter = toAnalizar;
                                }
                                else
                                {
                                    ASCIIescribir.Add(LZWdiccionario[thisCaracter]);
                                    LZWdiccionario.Add(toAnalizar, LZWdiccionario.Count + 1);
                                    thisCaracter = Convert.ToChar(item).ToString();
                                }
                            }
                        }
                        ASCIIescribir.Add(LZWdiccionario[thisCaracter]);
                        var textotamano = Convert.ToString(LZWdiccionario.LongCount()) + ".";
                        writer.Write(textotamano.ToCharArray());
                        foreach (var item in listaCaracteresExistentes)
                        {
                            var Indice = Convert.ToByte(item);
                            writer.Write(Indice);
                        }
                        writer.Write(Environment.NewLine);
                        var mayorIndice     = ASCIIescribir.Max();
                        var bitsIndiceMayor = (Convert.ToString(mayorIndice, 2)).Count();
                        writer.Write(bitsIndiceMayor.ToString().ToCharArray());
                        writer.Write(extension.ToCharArray());
                        writer.Write(Environment.NewLine);
                        if (mayorIndice > 255)
                        {
                            foreach (var item in ASCIIescribir)
                            {
                                var indiceBinario = Convert.ToString(item, 2);
                                while (indiceBinario.Count() < bitsIndiceMayor)
                                {
                                    indiceBinario = "0" + indiceBinario;
                                }
                                listaCaracteresBinario.Add(indiceBinario);
                            }
                            var allBits = string.Empty;
                            foreach (var item in listaCaracteresBinario)
                            {
                                for (int i = 0; i < item.Length; i++)
                                {
                                    if (allBits.Count() < 8)
                                    {
                                        allBits += item[i];
                                    }
                                    else
                                    {
                                        var allDecimal = Convert.ToInt64(allBits, 2);
                                        var allBytes   = Convert.ToByte(allDecimal);
                                        writer.Write((allBytes));
                                        allBits  = string.Empty;
                                        allBits += item[i];
                                    }
                                }
                            }
                            if (allBits.Length > 0)
                            {
                                var allResultado = Convert.ToInt64(allBits, 2);
                                writer.Write(Convert.ToByte(allResultado));
                            }
                        }
                        else
                        {
                            foreach (var item in ASCIIescribir)
                            {
                                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";
                        Factor FactorCompresion = new Factor();
                        FactorCompresion.GuaradarCompresiones(PropiedadesArchivoActual, "LZW");
                    }
                }
            }
        }
Exemple #2
0
        public void CompresionHuffmanImportar(FileStream ArchivoImportado)
        {
            string nombreArchivo            = Path.GetFileNameWithoutExtension(ArchivoImportado.Name);
            var    huffman                  = new Huffman();
            var    PropiedadesArchivoActual = new MiArchivo();

            PropiedadesArchivoActual.TamanoArchivoDescomprimido = ArchivoImportado.Length;
            PropiedadesArchivoActual.NombreArchivoOriginal      = ArchivoImportado.Name;
            ArchivoImportado.Close();
            var direccion          = Path.GetFullPath(ArchivoImportado.Name);
            int cantidadCaracteres = huffman.Leer(direccion);

            huffman.CrearArbol();
            byte[] encabezado = huffman.CrearEncabezado(cantidadCaracteres);
            using (FileStream archivo = new FileStream("TusArchivos/IMPORTADO_" + nombreArchivo + ".huff", FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                foreach (var item in encabezado)
                {
                    archivo.WriteByte(item);
                }
                int    bufferLength = 80;
                var    buffer       = new byte[bufferLength];
                string textoCifrado = string.Empty;
                using (var file = new FileStream(ArchivoImportado.Name, FileMode.Open))
                {
                    using (var reader = new BinaryReader(file))
                    {
                        while (reader.BaseStream.Position != reader.BaseStream.Length)
                        {
                            buffer = reader.ReadBytes(bufferLength);
                            foreach (var item in buffer)
                            {
                                int posiList;
                                posiList     = Datos.Instance.ListaCod.FindIndex(x => x.caracter == item);
                                textoCifrado = textoCifrado + Datos.Instance.ListaCod.ElementAt(posiList).codigo;
                                if ((textoCifrado.Length / 8) > 0)
                                {
                                    string escribirByte = textoCifrado.Substring(0, 8);
                                    byte   byteEscribir = Convert.ToByte(escribirByte, 2);
                                    archivo.WriteByte(byteEscribir);
                                    textoCifrado = textoCifrado.Substring(8);
                                }
                            }
                        }
                        reader.ReadBytes(bufferLength);
                    }
                }
                if (textoCifrado.Length > 0 && (textoCifrado.Length % 8) == 0)
                {
                    byte byteEsc = Convert.ToByte(textoCifrado, 2);
                }
                else if (textoCifrado.Length > 0)
                {
                    textoCifrado = textoCifrado.PadRight(8, '0');
                    byte byteEsc = Convert.ToByte(textoCifrado, 2);
                }
                PropiedadesArchivoActual.TamanoArchivoComprimido = archivo.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";
                Factor FactorCompresion = new Factor();
                FactorCompresion.GuaradarCompresiones(PropiedadesArchivoActual, "Huffman");
            };
        }