[Mono-osx] FileSystemWatcher workaround for Mac OS X
Geoff Norton
gnorton at novell.com
Wed Oct 22 08:09:41 EDT 2008
How is this any different than the existing managed FSW in SVN?
-g
On Tue, 2008-10-21 at 23:27 -0500, Kevin Heeney wrote:
> Attached is a FileSystemWatcher class that I wrote to use instead of
> Mono's FileSystemWatcher in System.IO for Mac OS X (at least Tiger). I
> have not tried, but I believe the FileSystemWatcher supplied with mono
> may work with Leopard since Leopard adds a feature called FSEvents.
> The FileSystemWatcher in Mono on Mac does not catch most onChanged
> events for files edited by the user; though it does seem to catch most
> onCreated and onDeleted. I noticed the bug posted on the Mono site,
> but the Priority was P5 (none), so I had to come up with an
> alternative. This solution is not great, but I am sending it out there
> for anyone who may need a FileSystemWatcher for Mac. It is intended to
> be a drop in replacement for the System.IO.FileSystemWatcher so
> hopefully it won't require any code changes.
>
> This implementation is different than the typical Windows/.NET method
> in that it does not rely on the OS or any File System Events from the
> OS. Instead, it 'samples' the folder to watch at a given interval
> [TimerInterval] and then compares to the last sample. That said, this
> method has more overhead than the File System Events concept and
> therefore may not be good for large folders. On the upside, it is OS
> independent and so can be used as a fallback for some OS's like Tiger.
>
>
> What is different from Windows implementation:
>
> * Directories do not raise OnChanged() for 'LastAccess'. This is
> because this routine was accessing the folders and changing
> the LastAccess Date.
>
> * Rename is not supported. For renamed items, you will get
> separate deleted and a created events.
>
> * Internal BufferSize is ignored. The property is there to not
> break existing code.
>
> * Does not raise 'as many' changed events as
> System.IO.FileSystemWatcher on Windows. Windows implementation
> may raise 3 events for 1 save of a file. This method raises 1.
> I prefer this method more, but it is a difference worth
> noting.
>
> * Added property [TimerInterval] which takes the interval in
> milliseconds between samples. This is how often the folder is
> checked for changes. Default is 1000 (1 sec)
>
>
> Disclaimer: I am sure there is a bug or many. This is posted to offer
> one approach for people interested to build on. I am using this class
> and will continue to test and tweak. If you want me to send you any
> fixes, shoot me an email.
>
>
> Mono bug this is in response to:
> https://bugzilla.novell.com/show_bug.cgi?id=428270 and
> http://www.mail-archive.com/mono-bugs@lists.ximian.com/msg53866.html
>
>
> Thanks,
>
> Kevin Heeney
>
> _______________________________________________
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-osx
More information about the Mono-osx
mailing list