Es necesario que el archivo de configuración resida en la ubicación de la aplicación y debe tener esta estructura:
<?xml version="1.0" encoding="UTF-8"?> <configuraciones> <!--Las rutas deben finalizar con contrabarra--> <rutaorigen>\\Servidor_Origen\Recurso\</rutaorigen> <nombrearchivoorigen>Archivo_Origen.jmb</nombrearchivoorigen> <rutadestino>\\Servidor_Destino\Repositorio\</rutadestino> <nombrearchivodestino>Archivo_Destino.jmb</nombrearchivodestino> <!--Para introducir e-mail separado con coma y espacio--> <destinatarioscorreo>elfosodelsarlacc@jmb.es</destinatarioscorreo> <!--Escritura de Log, valores Y | N--> <escrituralog>Y</escrituralog> <rutalog>C:\TMP\Log\</rutalog> </configuraciones>
Mediante Visual Studio creamos una aplicaion de línea de comandos e introducimos el siguiente código:
Imports System.Xml Imports System.IO Imports Microsoft.VisualBasic.FileIO Module Persefone ' Definición de valores globales Public RutaOrigen As String Public RutaDestino As String Public NombreArchivoOrigen As String Public NombreArchivoDestino As String Public Destinatarios As String Public EscrituraLog As String Public RutaLog As String Public Sub LecturaConfiguracion() Dim XmlDoc As System.Xml.XmlDocument Dim NodeList As XmlNodeList Dim Node As XmlNode 'El archivo de configuración deberá ubicarse en la ruta de la aplicación If FileSystem.FileExists(System.AppDomain.CurrentDomain.BaseDirectory & "Config_Persefone.xml") Then XmlDoc = New XmlDocument() XmlDoc.Load(System.AppDomain.CurrentDomain.BaseDirectory & "Config_Persefone.xml") ' Ruta origen NodeList = XmlDoc.SelectNodes("configuraciones/RutaOrigen") For Each Node In NodeList RutaOrigen = (Node.InnerXml) Next ' Ruta destino NodeList = XmlDoc.SelectNodes("configuraciones/RutaDestino") For Each Node In NodeList RutaDestino = (Node.InnerXml) Next ' Nombre del archivo origen NodeList = XmlDoc.SelectNodes("configuraciones/NombreArchivoOrigen") For Each Node In NodeList NombreArchivoOrigen = (Node.InnerXml) Next ' Nombre del archivo destino NodeList = XmlDoc.SelectNodes("configuraciones/NombreArchivoDestino") For Each Node In NodeList NombreArchivoDestino = (Node.InnerXml) Next ' Destinatarios de correo para las notificaciones NodeList = XmlDoc.SelectNodes("configuraciones/DestinatariosCorreo") For Each Node In NodeList Destinatarios = (Node.InnerXml) Next ' Escritura de Log NodeList = XmlDoc.SelectNodes("configuraciones/EscrituraLog") For Each Node In NodeList EscrituraLog = (Node.InnerXml) Next ' Ruta Log de la Aplicación NodeList = XmlDoc.SelectNodes("configuraciones/RutaLog") For Each Node In NodeList RutaLog = (Node.InnerXml) Next Else EscribeLog(Now.ToString & " , Er , No existe el archivo de configuración en la ruta " & (System.AppDomain.CurrentDomain.BaseDirectory & "Config_Persefone.xml")) End If End Sub Private Sub MoverFicheros() Dim Archivo As New FileInfo(FileSystem.GetFileInfo(RutaOrigen & NombreArchivoOrigen).ToString) Try If FileSystem.FileExists(RutaOrigen & NombreArchivoOrigen) Then FileSystem.CopyFile(RutaOrigen & NombreArchivoOrigen, RutaDestino & NombreArchivoDestino, True) EscribeLog(Now.ToString & " , Ok , Se ha traspasado correctamente el fichero " & RutaOrigen & NombreArchivoOrigen & " a la carpeta destino " & RutaDestino & NombreArchivoDestino & vbCrLf & _ " La fecha de creación del archivo en origen ha sido: " & Archivo.CreationTime & " con un tamaño de: " & ((Archivo.Length / 1024) / 1024).ToString & " Mb") EnvioCorreo(Now.ToString & " , Ok , Se ha traspasado correctamente el fichero " & RutaOrigen & NombreArchivoOrigen & " a la carpeta destino " & RutaDestino & NombreArchivoDestino & vbCrLf & _ " La fecha de creación del archivo en origen ha sido: " & Archivo.CreationTime & " con un tamaño de: " & ((Archivo.Length / 1024) / 1024).ToString & " Mb") Else EscribeLog(Now.ToString & " , Er , No se ha encontrado el archivo " & RutaOrigen & NombreArchivoOrigen) EnvioCorreo(Now.ToString & " , Er , No se ha encontrado el archivo " & RutaOrigen & NombreArchivoOrigen) End If Catch ex As Exception EscribeLog(Now.ToString & " , Er , Ha ocurrido un error en el movimiento de archivos. " & ex.Message) EnvioCorreo(Now.ToString & " , Er , Ha ocurrido un error en el movimiento de archivos. " & ex.Message) End Try End Sub Public Sub EnvioCorreo(ByVal MensajeCorreo As String) 'Agregar referencia System.Web Dim clienteSMTP As New System.Net.Mail.SmtpClient("servidor.correo.es") Dim correo As New System.Net.Mail.MailMessage() Try 'Valores de envío correo.To.Add(Destinatarios.ToString) correo.From = New System.Net.Mail.MailAddress("elfosodelsarlaccd@gmail.com") correo.Subject = "Traspaso Demeter" correo.Body = MensajeCorreo 'Envio del correo clienteSMTP.Send(correo) EscribeLog(Now.ToString & " , Ok , Se ha enviado un correo de notificación a: " & correo.To.ToString) Catch ex As Exception EscribeLog(Now.ToString & " , Er , No se ha podido enviar un correo de notificación a: " & correo.To.ToString & " Motivo: " & ex.Message) End Try End Sub Public Sub EscribeLog(ByVal mensaje As String) If EscrituraLog = "Y" Then If Not FileSystem.DirectoryExists(RutaLog) Then Try FileSystem.CreateDirectory(RutaLog.ToString) EscribeLog(Now.ToString & " , In , No existe la carpeta destino de log " & (RutaLog.ToString) & " . Se procede a su creación.") Catch ex As Exception EscribeLog(Now.ToString & " , Er , No se ha podido crear a carpeta destino de log " & (RutaLog.ToString)) End Try End If Dim NombreLog As String = "Log_Persefone_" & Format(Now, "MM_yyyy") & ".log" Dim Escritor As New StreamWriter(RutaLog.ToString & NombreLog, True) Try Escritor.WriteLine(mensaje) Escritor.Close() Escritor = Nothing Catch ex As Exception EscribeLog(Now.ToString & " , Er , " & ex.Message) End Try Else Exit Sub End If End Sub Sub Main() LecturaConfiguracion() EscribeLog(Now.ToString & " , ++ , Iniciando Persefone") MoverFicheros() EscribeLog(Now.ToString & " , ++ , Finalizando Persefone") End Sub End Module
Ahora programaremos una tarea de Windows para que ejeute Perséfone cuando deseemos.
No hay comentarios:
Publicar un comentario