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