/// <summary> /// Método manejador del evento Click empleado para comenzar a comparar los archivos. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { try { var rutaSalida = textBox3.Text; var rutaA = textBox1.Text; var rutaB = textBox2.Text; // Obtengo las diferentes codificaciones para el tratamiento de los archivos. Encoding encPrimer = Encoding.GetEncoding(comboA.Text); Encoding encSegundo = Encoding.GetEncoding(comboB.Text); Encoding encSalida = Encoding.GetEncoding(comboOut.Text); var procesoComparacion = new ProcesoComparador(encPrimer, encSegundo, encSalida); // Tipo de operacion seleccionada. string selectedValue = comboBox1.Text; switch (selectedValue) { case "A-B": buttonCompare.Enabled = false; comboBox1.Enabled = false; // Realizo la operación. procesoComparacion.RealizarOperacion(rutaA, rutaB, rutaSalida, TipoComparacion.Diferencia); break; case "XOR": buttonCompare.Enabled = false; comboBox1.Enabled = false; // Realizo la operación. procesoComparacion.RealizarOperacion(rutaA, rutaB, rutaSalida, TipoComparacion.XOR); break; case "AND": buttonCompare.Enabled = false; comboBox1.Enabled = false; // Realizo la operación. procesoComparacion.RealizarOperacion(rutaA, rutaB, rutaSalida, TipoComparacion.AND); break; default: break; } } catch (Exception) { // LOG throw; } }
/// <summary> /// Método encargado de realizar una operacion según el tipo especificado. /// </summary> public string RealizarOperacion(string rutaFicheroA, string rutaFicheroB, string rutaSalida, TipoComparacion tipoComparacion) { string retorno; // Validacion ruta textbox tres. char caracter = (char)92; while (true) { if (rutaSalida.StartsWith(caracter.ToString())) { rutaSalida = rutaSalida.Remove(0, 1); } else { break; } } // Ordenamos utilizando como criterio de ordenamiento toda la línea. ArchivoHelper.Ordenar(rutaFicheroA, rutaFicheroA, x => x, encodingPrimerArchivo, encodingArchivoSalida); ArchivoHelper.Ordenar(rutaFicheroB, rutaFicheroB, x => x, encodingSegundoArchivo, encodingArchivoSalida); // Obtenemos los nombres de los archivos para asignar un nombre coherente al archivo de salida. var nombreFicheroB = ProcesoComparador.ObtenerNombreSinEspacios(rutaFicheroB); var nombreFicheroA = ProcesoComparador.ObtenerNombreSinEspacios(rutaFicheroA); // Formateamos la salida del archivo. if (!File.Exists(rutaSalida)) { if (Directory.Exists(rutaSalida)) { rutaSalida = rutaSalida + $"\\{nombreFicheroA}_comp_{nombreFicheroB}.txt"; } else { using (File.Create(rutaSalida)) { } } } using (StreamWriter escritorSalida = new StreamWriter(rutaSalida, true, encodingArchivoSalida)) using (StreamReader lectorB = new StreamReader(rutaFicheroB, encodingSegundoArchivo)) using (StreamReader lectorA = new StreamReader(rutaFicheroA, encodingPrimerArchivo)) { switch (tipoComparacion) { case TipoComparacion.Diferencia: retorno = DiferenciaEntre(escritorSalida, lectorA, lectorB); break; case TipoComparacion.XOR: retorno = XorEntre(escritorSalida, lectorA, lectorB); break; case TipoComparacion.AND: retorno = AndEntre(escritorSalida, lectorA, lectorB); break; default: return(null); } } ArchivoHelper.Ordenar(rutaSalida, rutaSalida, x => x, encodingArchivoSalida, encodingArchivoSalida); return(retorno); }