Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows Service w/ FileSystemWatcher in C#

I have to create a program that monitors changes in file size. I already made a simple windows service and filesystemwatcher so I am now familiar w/ the concept. I also made a code that checks for the filesize (made it in a form button)but haven't yet implemented in my filesystemwatcher. How do I create a windows service that has a filewatcher that monitors the file size? Do I have to put a filesystemwatcher inside the windows service and call the watcher via the OnStart method?

like image 443
Harambe Attack Helicopter Avatar asked Aug 17 '12 03:08

Harambe Attack Helicopter


People also ask

What is FileSystemWatcher?

Use FileSystemWatcher to watch for changes in a specified directory. You can watch for changes in files and subdirectories of the specified directory. You can create a component to watch files on a local computer, a network drive, or a remote computer.

Is FileSystemWatcher multithreaded?

Nope, filesystemwatchers run on their own thread.


3 Answers

If you're making a Window's service, then you'll want to do it programmatically. I usually keep forms out of my services and make a separate interface for them to communicate. Now the FileSystemWatcher doesn't have an event to watch solely for size, so you'll want to make a method that ties to FileSystemWatcher.Changed to check for modifications to existing files. Declare and initialize the control in your OnStart method and tie together the events as well. Do any cleanup code in your OnStop method. It should look something like this:

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
}

Also note, the FileSystemWatcher will fire off multiple events for a single file, so when you're debugging watch for patterns to work around it.

like image 164
Luke Wyatt Avatar answered Oct 10 '22 04:10

Luke Wyatt


You can simply enable your filesystemwatcher object in the OnStart method by setting

EnableRaisingEvents = true;

Then handle the event. That should do it.

like image 37
Kevin Anderson Avatar answered Oct 10 '22 05:10

Kevin Anderson


you can create a delegate to handle what has changed like

myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed);

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

And so on

I would recommend you to read this article http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv

Also have this delegate on_start in windows service

like image 27
Peru Avatar answered Oct 10 '22 04:10

Peru