Monitorizar una carpeta usado FileWatcher de .NET

En esta ocasión vamos a realizar una aplicación de consola para que vigile los archivos pdf depositados en una carpeta y que automáticamente los traslade a otra ubicación.

Para crear la apliación se ha utilizado MS Visual Studio 2010 con el lenguaje Visual Basic .NET





Creación de una apliación de consola con Visual Studio 2010

Abrimos MS Visual Studio 2010 y creamos un nuevo proyecto Windows, seleccionaremos la plantillaAplicación de consola





Para usar la clase FileSystemWatcher debemos importar el espacio de nombres System.IO (Imports System.IO) ó bien declarar el namespace completo  (Dim Vigilante As New System.IO.FileSystemWatcher())

El código completo es:


Imports System.IO

Module Module1

    Sub Main()
        ' Mostrar en consola el comienzo de la aplicaciónb
        Console.WriteLine("Comienza la monitorización")

        MonitorizarCarpeta()
        ' Dejamos la aplicación abierta hasta que se cierre la consola
        Console.WriteLine("Para salir pulsar q + Intro")
        While Chr(Console.Read()) <> "q"c
        End While

    End Sub

    Public Sub MonitorizarCarpeta()

        ' Definir variables
        Dim Vigilante As New FileSystemWatcher() 

        ' Ruta que vigilaremos 

        Dim RutaVigilar As String = "C:\Tmp\"              

        ' Ruta a monitorizar
        Vigilante.Path = RutaVigilar
        ' Establece el tamaño (en bytes) del búfer interno para controlar 

        ' la entrada masiva de documentos, 
        ' ver http://msdn.microsoft.com/es-es/library/system.io.filesystemwatcher.internalbuffersize.aspx
        Vigilante.InternalBufferSize = 8192
        ' Inclusion de monitorizacion en Subdirectorios
        Vigilante.IncludeSubdirectories = True
        ' Filtro de monitorización,
        ' Solo realizaremos acciones sobre archivos pdf
        Vigilante.Filter = ("*.pdf")
        Vigilante.NotifyFilter = (NotifyFilters.FileName)

        ' Monitorizar la creación de archivos
        AddHandler Vigilante.Created, AddressOf OnChanged
        ' Otros eventos que se pueden monitorizar
        '     AddHandler Vigilante.Changed, AddressOf OnChanged
        '     AddHandler Vigilante.Deleted, AddressOf OnChanged
        '     AddHandler Vigilante.Renamed, AddressOf OnRenamed

        ' Esta opción se utiliza en procesos asincrónicos 

        ' para notificar a la aplicación que un proceso ha terminado
        Vigilante.EnableRaisingEvents = True

    End Sub

    Private Sub OnChanged(ByVal source As Object, 

                                ByVal e As FileSystemEventArgs)

        ' Definir variables
        Dim RutaDestino As String  ' Destino de los archivos
        Dim ArchivoOrigen As String
        Dim ArchivoDestino As String

        ' Establecer valor a las variables
        ArchivoOrigen = e.FullPath.ToString
        RutaDestino = "C:\ElFosoDelSarlacc\" ' terminado en \
        ArchivoDestino = RutaDestino & e.Name

        ' Se pausa la ejecución de la aplicación 500 ms para que no se colapse
        System.Threading.Thread.Sleep(500)

        ' Movemos los archivos desde la ruta origen (RutaVigilas) a la ruta destino
          ' Se usa FileSystem.MoveFile del namespace  Microsoft.VisualBasic.FileIO
        Microsoft.VisualBasic.FileIO.FileSystem.MoveFile 

                              (ArchivoOrigen, ArchivoDestino)

        ' Notificamos en pantalla de la acción
        Console.WriteLine(ArchivoOrigen & " traspasado con exito a " 

                               & ArchivoDestino)

    End Sub
End Module


Compilamos la solución y la ejecutamos. Se abrirá una aplicación de consola en espera de que suceda el evento de creacion de documentos pdf en la carpeta origen. Crearemos ó copiaremos archivos pdf en la rutra origen para observar como se van traspasando a la ruta destino que hemos definido.







No hay comentarios:

Publicar un comentario