gpt4 book ai didi

c# - FileSystemWatcher 陷阱

转载 作者:太空狗 更新时间:2023-10-30 00:05:01 29 4
gpt4 key购买 nike

我正在开发一个需要使用 FileSystemWatcher 类的 C# 程序,以便在创建新文件时通知它。作为初始化的一部分,程序会扫描目录,以便处理其中已存在的任何文件。一切正常。

但是,在与另一位开发人员的讨论中,我们开始质疑这是否会一直有效。是否存在 FileSystemWatcher 会错过文件创建的条件?如果可以,这些条件是什么?

为了处理这种情况,我们只需要在初始化过程中运行定期扫描目录的代码,但是 FileSystemWatcher 丢失文件的可能性有多大?

最佳答案

FileSystemWatcher 通常 不会丢失文件。然而:

  • 因为它基于 ReadDirectoryChangesW,所以它只检测文件目录条目的更改,而不是文件本身的更改。对文件的大多数更改都会更新目录条目,但也有一些异常(exception)(参见 this article )。
  • 文件更改通知的缓冲区大小有限;如果您处理事件的速度不够快,缓冲区就会溢出,导致您错过事件。这就是为什么你不应该在事件处理程序中做任何繁重的处理;如果您不能足够快地处理事件,只需将它们添加到您在另一个线程上处理的队列中。

其他陷阱:

  • 通知不会立即到达;实际更改和通知之间的延迟通常很短,但我已经看到它增长到长达几秒钟。对于大多数用例而言,这不是主要问题,但根据您尝试执行的操作,这可能是个问题。
  • Moved 没有事件。如果将文件从一个目录移动到另一个目录,您将收到两个通知:DeletedCreated
  • 有时,根据音量配置,通知中的路径可以采用旧的 8.3 格式(例如,您可以获得 SOMETH~1.TXT 而不是 Something.txt)
  • 如果您将现有的非空目录移动到监视目录中,您只会收到有关目录本身的通知,而不是其内容。您将需要手动检查内容。
  • Changed 事件可以针对同一个文件发生多次;你需要自己处理重复项

关于c# - FileSystemWatcher 陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000831/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com