gpt4 book ai didi

c# - 用于通知的 FileSystemWatcher

转载 作者:太空狗 更新时间:2023-10-30 00:46:15 27 4
gpt4 key购买 nike

我正在创建一个使用 FileSystemWatcher 的 Windows 应用程序。 FileSystemWatcher 监视一些目录的变化。每次将某个文件添加到此目录时,FileSystemWatcher 都必须将有关此文件的信息添加到 XML 文件中。一切正常,但是,例如,当我同时添加 100 个文件时(假设某些应用程序将这些文件添加到目录中),并不是每个文件的信息都出现在这个 xml 文件中。

我想使用队列。并使用它向该集合中添加项目。并使用定时器。计时器将从该集合中向 XML 添加信息。这是个好主意吗?

谁能告诉我该怎么做?


所以我认为我必须创建一个 Windows 应用程序和一个 Windows 服务。 WinApp 只会向 EventLog 中添加信息,而 Windows Service 会读取信息 EventLog 并将其写入 XML。我认为这将是最好的方法。我在等待好的建议

最佳答案

正如 Michael Stum 在他的回答中所写,您可以尝试增加缓冲区大小 ( FileSystemWatcher.InternalBufferSize )。但是请注意,您不应将此值设置为过高的值。另外,恕我直言,这可能只是一个临时修复,看看当您同时向文件夹中添加更多文件时会发生什么。

如果增加缓冲区大小没有帮助,我已经阅读了一些您可以尝试的其他方法:

  • 如果您订阅了 FileSystemWatcher 的通知事件,请尽量让您的事件处理程序尽可能短; IE。确保执行不会停留太久。如果您必须为每个文件通知做大量工作,您可以尝试启动一个单独的线程并在那里进行处理;然后,您的事件处理程序可以非常快速地返回给调用者(并且文件通知会更快地从缓冲区/队列中删除)。

  • 除了某些内容已更改的基本通知外,不要使用 FileSystemWatcher 提供的任何其他信息。一旦收到任何文件更改通知,请等待一小段时间,直到没有更多通知到达(即等待 100 个同时文件更改通知中的最后一个通知)。然后手动列出目录的内容并将所需的信息传输到您的 XML。

    这有一个主要缺点:手动检测是否以及哪些文件已被删除、重命名或创建并不容易。您的程序必须保留最后一个目录列表,可以将当前列表与其进行比较以找出更改的内容。

    这样做的好处是您可以相当确定不会因为某些 FileSystemWatcher 缓冲区溢出而丢弃任何更改。

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

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