How does FileSystemWatcher work on another computers directory?

后端 未结 2 542
醉话见心
醉话见心 2021-01-18 11:13

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 ?

相关标签:
2条回答
  • 2021-01-18 11:50

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

    It kinda is. The underlying API - ReadDirectoryChanges() - 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.

    0 讨论(0)
  • 2021-01-18 11:59

    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.

    0 讨论(0)
提交回复
热议问题