private void ProcesarArchivo()
    {
        DataTable tablaErrores = IniciarTablaErrores();

        Int32 contador = 0;
        Int32 contadorOmitidos = 0;
        Int32 contadorErrores = 0;
        Int32 contadorIngresados = 0;

        using (StreamReader archivo = new StreamReader(FileUpload_ArchivoPlano.PostedFile.InputStream))
        {
            String linea;

            radicacionHojasDeVida _rad = new radicacionHojasDeVida(Session["idEmpresa"].ToString(), Session["USU_LOG"].ToString());

            while ((linea = archivo.ReadLine()) != null)
            {
                contador += 1;
                String[] campos = linea.Split(';');

                DataRow fila;

                if ((campos.Length < 4) || (campos.Length > 4))
                {
                    fila = tablaErrores.NewRow();
                    fila["CODIGO_ERROR"] = "ERROR_NUM_CAMPOS";
                    fila["LINEA"] = contador;
                    fila["CAMPO"] = null;
                    fila["DESCRIPCION"] = "El numero de campos de la linea (" + campos.Length.ToString() + ") no corresponde al establecido (4).";

                    tablaErrores.Rows.Add(fila);

                    contadorErrores += 1;
                }
                else
                {
                    if ((campos[0].ToUpper() != "CC") && (campos[0].ToUpper() != "TI") && (campos[0].ToUpper() != "CE"))
                    {
                        fila = tablaErrores.NewRow();
                        fila["CODIGO_ERROR"] = "ERROR_TIPO_DOC_IDENTIDAD";
                        fila["LINEA"] = contador;
                        fila["CAMPO"] = "TIPO_DOCUMENTO_IDENTIDAD";
                        fila["DESCRIPCION"] = "Solo se admiten los siguientes valores CC - CE - TI - PA";

                        tablaErrores.Rows.Add(fila);

                        contadorErrores += 1;
                    }
                    else
                    {
                        if (IsNumeric(campos[1]) == false)
                        {
                            fila = tablaErrores.NewRow();
                            fila["CODIGO_ERROR"] = "ERROR_NON_NUMERIC";
                            fila["LINEA"] = contador;
                            fila["CAMPO"] = "NUMERO_DOCUMENTO";
                            fila["DESCRIPCION"] = "Solo se admiten numeros, sin espacios, lineas, puntos y comas.";

                            tablaErrores.Rows.Add(fila);

                            contadorErrores += 1;
                        }
                        else
                        {
                            if (String.IsNullOrEmpty(campos[2]) == true)
                            {
                                fila = tablaErrores.NewRow();
                                fila["CODIGO_ERROR"] = "ERROR_NULL";
                                fila["LINEA"] = contador;
                                fila["CAMPO"] = "NOMBRES_ASPIRANTE ";
                                fila["DESCRIPCION"] = "El campos no puede ser nulo o vacio.";

                                tablaErrores.Rows.Add(fila);

                                contadorErrores += 1;
                            }
                            else
                            {
                                if (String.IsNullOrEmpty(campos[3]) == true)
                                {
                                    fila = tablaErrores.NewRow();
                                    fila["CODIGO_ERROR"] = "ERROR_NULL";
                                    fila["LINEA"] = contador;
                                    fila["CAMPO"] = "APELLIDOS_ASPIRANTE ";
                                    fila["DESCRIPCION"] = "El campos no puede ser nulo o vacio.";

                                    tablaErrores.Rows.Add(fila);

                                    contadorErrores += 1;
                                }
                                else
                                {
                                    _rad.MensajeError = null;

                                    Int32 contadorRegSol = _rad.ObtenerNumRegSolicitudesPorTipDocAndNumDoc(campos[0], campos[1]);
                                    if (contadorRegSol <= 0)
                                    {
                                        if (_rad.MensajeError != null)
                                        {
                                            fila = tablaErrores.NewRow();
                                            fila["CODIGO_ERROR"] = "ERROR_BD";
                                            fila["LINEA"] = contador;
                                            fila["CAMPO"] = null;
                                            fila["DESCRIPCION"] = "Eror en Base de datos al intentar consultar si el registro ya se encuentra: " + _rad.MensajeError;

                                            tablaErrores.Rows.Add(fila);

                                            contadorErrores += 1;
                                        }
                                        else
                                        {
                                            if (_rad.AdicionarRegistroRegSolicitudIngresoMasivo(campos[3], campos[2], campos[0], campos[1]) <= 0)
                                            {
                                                fila = tablaErrores.NewRow();
                                                fila["CODIGO_ERROR"] = "ERROR_BD";
                                                fila["LINEA"] = contador;
                                                fila["CAMPO"] = null;
                                                fila["DESCRIPCION"] = "Eror en Base de datos al intentar ingresar el registro del aspirante: " + _rad.MensajeError;

                                                tablaErrores.Rows.Add(fila);

                                                contadorErrores += 1;
                                            }
                                            else
                                            {
                                                contadorIngresados += 1;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        contadorOmitidos += 1;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        Label_TotalRegistroProcesados.Text = contador.ToString();
        Label_RegistrosErroneos.Text = contadorErrores.ToString();
        Label_RegistrosInsertados.Text = contadorIngresados.ToString();
        Label_RegistrosOmitidos.Text = contadorOmitidos.ToString();

        GridView_ResultadosCargue.DataSource = tablaErrores;
        GridView_ResultadosCargue.DataBind();

        Ocultar(Acciones.Resultados);
        Mostrar(Acciones.Resultados);

        Informar(Panel_FONDO_MENSAJE, Image_MENSAJE_POPUP, Panel_MENSAJES, Label_MENSAJE, "El archivo fue procesado, por favor verifique la información en la sección de Resultados del Cargue.", Proceso.Correcto);
    }