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