public ActionResult GeneraciónDelArchivoOriginal() { string binario = string.Empty; string texto = string.Empty; CantidadChar valor = new CantidadChar(); foreach (byte bit in ASCII) { binario = string.Empty; binario = binario + Convertir(bit, binario); foreach (char car in binario) { valor.codPref = valor.codPref + car; foreach (char Key in diccionario.Keys) { CantidadChar valor2 = GetAnyValue <CantidadChar>(Convert.ToByte(Key)); if (valor.codPref == valor2.codPref) { texto = texto + Key; valor.codPref = string.Empty; } } } } using (var writeStream = new FileStream(RutaArchivos + "\\..\\Files\\archivoDescomprimido.huff", FileMode.OpenOrCreate)) { using (var writer = new BinaryWriter(writeStream)) { int cantidadvecesbuffer = 0; byte[] byteBufferfinal = new byte[100]; int cantidad = 0; foreach (char carfinal in texto) { byteBufferfinal[cantidad] = Convert.ToByte(carfinal); cantidad++; if (cantidad == 100) { if (cantidadvecesbuffer == 0) { writer.Write(byteBufferfinal); byteBufferfinal = new byte[100]; cantidadvecesbuffer++; cantidad = 0; } else { writer.Seek(0, SeekOrigin.End); writer.Write(byteBufferfinal); byteBufferfinal = new byte[100]; cantidad = 0; } } } if ((byteBufferfinal[0] == 0) && (byteBufferfinal[1] == 0)) { // nada porque se aseguró que el buffer esté vacío } else { int contador0 = 0; List <byte> ListAux = new List <byte>(); foreach (byte bit in byteBufferfinal) { if (bit == 0) { contador0++; } else { contador0 = 0; } if (contador0 != 3) { ListAux.Add(bit); } else { for (int i = 0; i < 2; i++) { ListAux.Remove(ListAux.Last()); } break; } } byteBufferfinal = new byte[ListAux.Count()]; int j = 0; foreach (byte bite in ListAux) { byteBufferfinal[j] = bite; j++; } writer.Seek(0, SeekOrigin.End); writer.Write(byteBufferfinal); } } } return(RedirectToAction("RazonFactor")); }
//Al momento de haber recibido el string del texto, habrá que separar caracter por caracter public ActionResult Arbol() { //creación del árbol Huffman HuffmanProcess = new Huffman(); Arbol Arbol = new Arbol(); Arbol.raíz = HuffmanProcess.TreeCreation(lista); string prefíjo = string.Empty; diccionario = Arbol.códigosPrefíjo(Arbol.raíz, diccionario, prefíjo); //Escritura del compresor códigos prefíjos convertidos a bytes using (var writeStream = new FileStream(RutaArchivos + "\\..\\Files\\archivoComprimido.huff", FileMode.Open)) { using (var writer = new BinaryWriter(writeStream)) { byte[] bytebuffer = new byte[500]; List <char> cadena = new List <char>(); int cantidadbuffer = 0; foreach (byte bit in ListaByte) { CantidadChar separación = new CantidadChar(); separación = GetAnyValue <int>(bit); foreach (char caracter in separación.codPref) { cadena.Add(caracter); } } string binario = ""; foreach (char car in cadena) { if (binario.Count() == 8) { byte DECABYTE = new byte(); var pref = binario; decimal x = Convert.ToInt32(pref, 2); DECABYTE = Convert.ToByte(x); bytebuffer[cantidadbuffer] = DECABYTE; cantidadbuffer++; binario = string.Empty; binario = binario + car; } else { binario = binario + car; } if (cantidadbuffer == 500) { writer.Seek(0, SeekOrigin.End); writer.Write(bytebuffer); cantidadbuffer = 0; bytebuffer = new byte[500]; } } if (binario != string.Empty) { while (binario.Count() != 8) { binario = binario + "0"; } byte DECABYTE = new byte(); var pref = binario; decimal x = Convert.ToInt32(pref, 2); DECABYTE = Convert.ToByte(x); bytebuffer[cantidadbuffer] = DECABYTE; int contador0 = 0; List <byte> ListAux = new List <byte>(); foreach (byte bit in bytebuffer) { if (bit == 0) { contador0++; } else { contador0 = 0; } if (contador0 != 10) { ListAux.Add(bit); } else { for (int i = 0; i < 9; i++) { ListAux.Remove(ListAux.Last()); } break; } } bytebuffer = new byte[ListAux.Count()]; int j = 0; foreach (byte bit in ListAux) { bytebuffer[j] = bit; j++; } writer.Seek(0, SeekOrigin.End); writer.Write(bytebuffer); } } } return(RedirectToAction("Download")); }
public ActionResult LecturaDescompresión(HttpPostedFileBase postedFile) { diccionario = new Dictionary <char, CantidadChar>(); using (var stream = new FileStream(RutaArchivos + "\\..\\Files\\archivoComprimido.huff", FileMode.Open)) { using (var reader = new BinaryReader(stream)) { string prefijos = string.Empty; char caracter = ' '; byte[] byteBuffer = new byte[bufferLengt]; bool encontrado = false; bool separador = false; while (reader.BaseStream.Position != reader.BaseStream.Length) { byteBuffer = reader.ReadBytes(bufferLengt); for (int i = 0; i < byteBuffer.Count(); i++) { if (separador != true) { if ((byteBuffer[i] == 45)) { if ((byteBuffer[i + 1] == 45)) { separador = true; i = i + 2; } } if (encontrado == false) { if (byteBuffer[i] == 124) { caracter = (char)byteBuffer[i - 1]; encontrado = true; } } else { if ((byteBuffer[i + 1] != 124) && (byteBuffer[i] != 2)) { prefijos += (char)byteBuffer[i]; } else { CantidadChar prefijo = new CantidadChar(); prefijo.codPref = prefijos; if (prefijo.codPref[0] == '|') { string prueba = string.Empty; for (int j = 1; j < prefijo.codPref.Count(); j++) { prueba = prueba + prefijo.codPref[j]; } prefijo.codPref = prueba; } diccionario.Add(caracter, prefijo); encontrado = false; prefijos = ""; } } } else { ASCII.Add(byteBuffer[i]); } } } } } for (int i = 0; i < 2; i++) { ASCII.Remove(ASCII[0]); } return(RedirectToAction("GeneraciónDelArchivoOriginal")); }