示例#1
0
        /// <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);
        }