2012-08-17 22 views
8

Tengo que crear un programa que supervise los cambios en el tamaño del archivo. Ya hice un servicio de Windows simple y un gestor de sistema de archivos, así que ahora estoy familiarizado con el concepto. También hice un código que verifica el tamaño del archivo (lo hice en un botón de formulario) pero aún no lo implementé en mi filesystemwatcher. ¿Cómo creo un servicio de Windows que tenga un guardián de archivos que monitoree el tamaño del archivo? ¿Tengo que poner un sistema de archivos guardián dentro del servicio de Windows y llamar al observador a través del método OnStart?Servicio de Windows w/FileSystemWatcher en C#

Respuesta

14

Si está haciendo un servicio de Windows, querrá hacerlo mediante programación. Normalmente mantengo los formularios fuera de mis servicios y hago una interfaz separada para que se comuniquen. Ahora el FileSystemWatcher no tiene un evento para mirar únicamente por el tamaño, por lo que querrá hacer un método que vincule a FileSystemWatcher.Changed para verificar las modificaciones a los archivos existentes. Declare e inicialice el control en su método OnStart y ate los eventos también. Haga cualquier código de limpieza en su método OnStop. Debe ser algo como esto:

protected override void OnStart(string[] args) 
{ 
FileSystemWatcher Watcher = new FileSystemWatcher("PATH HERE"); 
Watcher.EnableRaisingEvents = true; 
Watcher.Changed += new FileSystemEventHandler(Watcher_Changed); 
} 

// This event is raised when a file is changed 
private void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
// your code here 
} 

También tenga en cuenta, la FileSystemWatcher se disparará a partir de diversos eventos para un solo archivo, por lo que cuando se depure reloj de patrones para trabajar alrededor de ella.

+0

Así que no debería agregar ningún elemento de la caja de herramientas en la ventana de servicio ... ¡Gracias! Lo intentaré lo antes posible. Eso fue realmente útil. –

+0

Me mantendría alejado de él. Cuando está ejecutando un servicio, Windows naturalmente deshabilita la integración de formularios y tiene que configurar el servicio después de la instalación para permitirlo. Si es algo que solo tus ojos ven, entonces probablemente no sea gran cosa, pero es un buen hábito evitar ese estilo de desarrollo (también por razones de seguridad). –

+1

ACTUALIZACIÓN: en Windows Vista y Win 7, la opción para permitir la interacción con el escritorio se eliminó por completo. No me di cuenta de esto en el momento de publicar. –

3

Usted puede simplemente permitir que su objeto FileSystemWatcher en el método OnStart estableciendo

EnableRaisingEvents = true; 

Luego controlar el evento. Deberias hacer eso.

+0

El valor predeterminado sería verdadero – Peru

+1

Tal vez. [MSDN] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.enableraisingevents.aspx) - "verdadero si el componente está habilitado; de lo contrario, falso. El valor predeterminado es falso. están usando el componente en un diseñador en Visual Studio 2005, el valor predeterminado es verdadero ". –

1

puede crear un delegado para manejar lo que ha cambiado como

myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed); 

private void FSWatcherTest_Changed(object sender, 
       System.IO.FileSystemEventArgs e) 
{ 
    //code here for newly changed file or directory 
} 

Y así sucesivamente

Yo recomendaría que lea este artículo http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv

también tienen este delegado on_start en servicio de las ventanas

Cuestiones relacionadas