Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FileSystemWatcher-是否会出现缓冲区溢出或类似情况?_C#_Filesystemwatcher - Fatal编程技术网

C# FileSystemWatcher-是否会出现缓冲区溢出或类似情况?

C# FileSystemWatcher-是否会出现缓冲区溢出或类似情况?,c#,filesystemwatcher,C#,Filesystemwatcher,我需要监视一个文件夹(在网络共享上),并在文件名更改和文件移动到子目录(所有一个事件)时收到通知。这一事件可能一天发生两次。我将有多个FileSystemWatchers来监视同一事物的多个文件夹 然而,FileSystemWatcher对于丢失事件是出了名的糟糕,我不能让这种情况发生。我尝试过复制环境,它似乎很有效,但我不知道这是否是因为我正在做一些特别的事情 如果我只监视重命名后的事件,我是否仍然可能有问题,或者我是否可以确保不会错过事件?在正常工作的网络中,您不应该有任何与丢失事件相关的错

我需要监视一个文件夹(在网络共享上),并在文件名更改和文件移动到子目录(所有一个事件)时收到通知。这一事件可能一天发生两次。我将有多个
FileSystemWatchers
来监视同一事物的多个文件夹

然而,
FileSystemWatcher
对于丢失事件是出了名的糟糕,我不能让这种情况发生。我尝试过复制环境,它似乎很有效,但我不知道这是否是因为我正在做一些特别的事情


如果我只监视重命名后的
事件,我是否仍然可能有问题,或者我是否可以确保不会错过事件?

在正常工作的网络中,您不应该有任何与丢失事件相关的错误,但您应该知道,网络上的一个简单故障将使您的FileSystemWatcher监视无效

与网络共享的连接瞬间中断将触发FileSystemWatcher中的错误,即使重新建立连接,FileSystemWatcher也不会再收到任何通知

这是一个在MSDN上找到的稍加修改的示例

static void Main()
{
    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @"\\yourserver\yourshare";
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    // Only watch text files.
    watcher.Filter = "*.txt";

    // Add handler for errors.
    watcher.Error += new ErrorEventHandler(OnError);

    // Begin watching.
    watcher.EnableRaisingEvents = true;

    // Wait for the user to quit the program.
    Console.WriteLine("Press \'q\' to quit the sample.");
    while(Console.Read()!='q');
}
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.
    Type t = e.GetException().GetType();
    Console.WriteLine(("The file system watcher experienced an error of type: " + 
                       t.ToString() + " with message=" + e.GetException().Message));
}

如果您尝试启动此控制台应用程序,然后禁用网络连接,您将看到Win32异常,但如果您再次这样做,运行的FileSystemWatcher将不会再看到错误事件,您的问题与它的标题有什么关系?我看不到任何关于缓冲区溢出的情况。使用默认缓冲区大小,最糟糕的情况是它可以存储15个事件。更典型的是大约30或40,这取决于文件路径名的长度。当然,这不会在每天发生两次的重命名事件上进行测试。@Hans Passant所有
FileSystemWatcher
s出于兴趣使用相同的缓冲区吗?不,每个观察者都有自己的缓冲区。