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