InternalBufferOverflowException Class
The exception thrown when the internal buffer overflows.
Assembly: System (in System.dll)
In a FileSystemWatcher, when you are notified of file changes, the system stores those changes in a buffer the component creates and passes to the Application Programming Interfaces (APIs). If there are many changes in a short time, the buffer can easily overflow, resulting in an exception being thrown, which essentially loses all changes. To keep the buffer from overflowing, use the FileSystemWatcher.NotifyFilter and FileSystemWatcher.IncludeSubdirectories properties to filter out your unwanted change notifications. You can also increase the size of the internal buffer through the FileSystemWatcher.InternalBufferSize property. However, increasing the size of the buffer is expensive, so keep the buffer as small as possible.
The following example shows how to create a FileSystemWatcher to monitor file changes (creates, deletes, renames, changes) occurring on a disk drive. The example also shows how to properly receive error notifications.
using System; using System.IO; class Program { static void Main(string[] args) { // Create a FileSystemWatcher to monitor all files on drive C. FileSystemWatcher fsw = new FileSystemWatcher("C:\\"); // Watch for changes in LastAccess and LastWrite times, and // the renaming of files or directories. fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName |NotifyFilters.DirectoryName; // Register a handler that gets called when a // file is created, changed, or deleted. fsw.Changed += new FileSystemEventHandler(OnChanged); fsw.Created += new FileSystemEventHandler(OnChanged); fsw.Deleted += new FileSystemEventHandler(OnChanged); // Register a handler that gets called when a file is renamed. fsw.Renamed += new RenamedEventHandler(OnRenamed); // Register a handler that gets called if the // FileSystemWatcher needs to report an error. fsw.Error += new ErrorEventHandler(OnError); // Begin watching. fsw.EnableRaisingEvents = true; Console.WriteLine("Press \'Enter\' to quit the sample."); Console.ReadLine(); } // This method is called when a file is created, changed, or deleted. private static void OnChanged(object source, FileSystemEventArgs e) { // Show that a file has been created, changed, or deleted. WatcherChangeTypes wct = e.ChangeType; Console.WriteLine("File {0} {1}", e.FullPath, wct.ToString()); } // This method is called when a file is renamed. private static void OnRenamed(object source, RenamedEventArgs e) { // Show that a file has been renamed. WatcherChangeTypes wct = e.ChangeType; Console.WriteLine("File {0} {2} to {1}", e.OldFullPath, e.FullPath, wct.ToString()); } // This method is called when the FileSystemWatcher detects an error. private static void OnError(object source, ErrorEventArgs e) { // Show that an error has been detected. Console.WriteLine("The FileSystemWatcher has detected an error"); // Give more information if the error is due to an internal buffer overflow. if (e.GetException().GetType() == typeof(InternalBufferOverflowException)) { // This can happen if Windows is reporting many file system events quickly // and internal buffer of the FileSystemWatcher is not large enough to handle this // rate of events. The InternalBufferOverflowException error informs the application // that some of the file system events are being lost. Console.WriteLine(("The file system watcher experienced an internal buffer overflow: " + e.GetException().Message)); } } }
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.