Search code examples
c#.netpollingfilesystemwatcher

Reliable way of monitoring file changes in a directory using the .NET framework


I'm looking for a reliable way of looking for changes in a directory.

I have tried using the FileSystemWatcher, but it's rather inaccurate when many small files are created, changed or deleted. It misses about 1 or 2 % of the files in my tests. That is quite a lot when you are adding or changing thousands of files rapidly.

I have tried polling for changes at different intervals 500 ms, 2000 ms etc. In this case I get too many hits. That might have something to do with the resolution of timestamps on the FileInfo object.

So my question is; is it possible, using the .NET Framework, to get the the changes to a directory reliably?

-- Christian


Solution

  • Have you tried increasing the InternalBufferSize? What size have you set it to?

    From MSDN:


    Note that a FileSystemWatcher may miss an event when the buffer size is exceeded. To avoid missing events, follow these guidelines: Increase the buffer size by setting the InternalBufferSize property. Avoid watching files with long file names, because a long file name contributes to filling up the buffer. Consider renaming these files using shorter names.


    Keep your event handling code as short as possible.