views:

1086

answers:

3

Something intrigues me and I don't find any resource on this.

How can FileSystemWatcher know when a file on a computer "A" is created/removed/changed/renamed ?

I thought that this worked with polling, (the observer polls the server to check update), but after verifying the network activity with Wireshark I saw that polling was not used. Does the SMB protocol use a observable/observer pattern ?

In this case how the server can know when a client doesn't observe him anymore ?

What is the consequence when the network falls during an observation and comes back right after?

Using FileSystemWatcher on another computer seems too easy to be true...

A: 

I think FileSystemWatcher does use an observer/observable pattern based on the underlying Win32 API. Not sure of the actual events but presumably when you initialise a FileSystemWatcher object to watch a network path and set the EnableRaisingEvents property it attaches itself behind the scenes to the folder as an observer by attaching to the events raised by the Win32 API as they would if the folder was on the same computer.

In the Observer design pattern, the subject (observable) is never aware of the number of or types of observer's therefore the point about the other computer knowing when the FSW is no longer watching is irrelevant.

If the network drops off during an event being raised that is a bit of a gotcha - someone else will have to help you there.

Rob Stevenson-Leggett
+5  A: 

Using FileSystemWatcher on another computer seems too easy to be true...

It kinda is. The underlying API opens up a connection to the server, which is responsible for responding when something changes. If that connection gets dropped for some reason, or you bump up against the connection limit of the OS you're connecting to, then you don't get notifications.

I've found that it is more reliable to poll periodically (with some rather long interval), and use FileSystemWatcher only as a way of responding quickly to changes in between polls.

Shog9
A: 

Just see the source code of FileSystemWatcher Very classic

Where can I find the code of FileSystemWatcher?
Eric
Use Reflector, and look into System.IO.FileSystemWatcher
Nathan Bedford