public static void ProcesaGastosComprobados(CLLASausageContext db) { var archivosXML = Directory.GetFiles(configuracionSistema.GastosComprobadosRutaOrigen, "*.xml"); string rutaCompletaArchivoXML = string.Empty; string directorioRaizArchivoXML = string.Empty; string nombreCompletoArhivoXML = string.Empty; string nombreArchivoXML = string.Empty; string rutaCompletaArchivoPDF = string.Empty; foreach (var archivoXML in archivosXML) { rutaCompletaArchivoXML = archivoXML; directorioRaizArchivoXML = archivoXML.Substring(0, archivoXML.LastIndexOf("\\") + 1); nombreCompletoArhivoXML = archivoXML.Substring(archivoXML.LastIndexOf(@"\") + 1); nombreArchivoXML = nombreCompletoArhivoXML.Substring(0, nombreCompletoArhivoXML.LastIndexOf(".")); rutaCompletaArchivoPDF = directorioRaizArchivoXML + nombreArchivoXML + ".pdf"; ExpedienteDigitalGastoComprobado gastoComprobado = new ExpedienteDigitalGastoComprobado(); try { using (FileStream fileStream = new FileStream(archivoXML, FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(Comprobante)); Comprobante comprobante = (Comprobante)serializer.Deserialize(fileStream); //Datos del CFDI gastoComprobado.EmisorNombre = comprobante.Emisor.Nombre; gastoComprobado.EmisorRFC = comprobante.Emisor.Rfc; gastoComprobado.Fecha = comprobante.Fecha; gastoComprobado.Folio = comprobante.Folio; gastoComprobado.SubTotal = comprobante.SubTotal; gastoComprobado.Total = comprobante.Total; gastoComprobado.RutaArchivoXMLOrigen = archivoXML; gastoComprobado.RutaArchivoXMLDestino = configuracionSistema.GastosComprobadosRutaDestino + gastoComprobado.Fecha.Substring(0, 4) + "\\" + gastoComprobado.Fecha.Substring(5, 2) + "\\" + nombreCompletoArhivoXML; gastoComprobado.RutaArchivoPDFOrigen = configuracionSistema.GastosComprobadosRutaOrigen + nombreArchivoXML + ".pdf"; gastoComprobado.RutaArchivoPDFDestino = configuracionSistema.GastosComprobadosRutaDestino + gastoComprobado.Fecha.Substring(0, 4).ToString() + "\\" + gastoComprobado.Fecha.Substring(5, 2) + "\\" + nombreArchivoXML + ".pdf"; } Directory.CreateDirectory(gastoComprobado.RutaArchivoXMLDestino.Substring(0, gastoComprobado.RutaArchivoXMLDestino.LastIndexOf("\\"))); File.Move(gastoComprobado.RutaArchivoXMLOrigen, gastoComprobado.RutaArchivoXMLDestino); File.Move(gastoComprobado.RutaArchivoPDFOrigen, gastoComprobado.RutaArchivoPDFDestino); db.ExpedienteDigitalGastoComprobado.Add(gastoComprobado); db.SaveChanges(); } catch (IOException exYaExiste) when((exYaExiste.HResult & 0x0000FFFF) == 183) //El archivo ya existe en destino (ERROR_ALREADY_EXISTS) { string rutaErrorYaExiste = directorioRaizArchivoXML + "ProcesadoSausage\\Error\\YaExistente\\"; Directory.CreateDirectory(rutaErrorYaExiste); string rutaCompletaErrorXML = rutaErrorYaExiste + nombreCompletoArhivoXML; string rutaCompletaErrorPDF = rutaErrorYaExiste + nombreArchivoXML + ".pdf"; try { if (File.Exists(rutaCompletaErrorXML)) { File.Delete(rutaCompletaArchivoXML); } else { File.Move(rutaCompletaArchivoXML, rutaCompletaErrorXML); } if (File.Exists(rutaCompletaErrorPDF)) { File.Delete(rutaCompletaArchivoPDF); } else { File.Move(rutaCompletaArchivoPDF, rutaCompletaErrorPDF); } } catch (Exception ex) { Logs.EscribirLog("Error al mover XML (Error lectura XML): " + Excepciones.ObtenerMensajesExcepcionEnCadenaSencilla(ex)); } } catch (Exception ex) { if ( Excepciones.ObtenerNombreExcepcion(ex) == "XmlException" || (Excepciones.ObtenerNombreExcepcion(ex) == "InvalidOperationException" && Excepciones.ObtenerMensajeExepcion(ex) == "No se esperaba <Acuse xmlns=''>.") ) { string rutaErrorXML = directorioRaizArchivoXML + "ProcesadoSausage\\Error\\LecturaXML\\"; Directory.CreateDirectory(rutaErrorXML); string rutaCompletaErrorXML = rutaErrorXML + nombreCompletoArhivoXML; string rutaCompletaErrorPDF = rutaErrorXML + nombreArchivoXML + ".pdf"; try { File.Move(rutaCompletaArchivoXML, rutaCompletaErrorXML); File.Move(rutaCompletaArchivoPDF, rutaCompletaErrorPDF); } catch (Exception exXML) { Logs.EscribirLog("Error al mover XML (Error lectura XML): " + Excepciones.ObtenerMensajesExcepcionEnCadenaSencilla(exXML)); } } } } }