【问题标题】:FileSystemWatcher文件系统观察器
【发布时间】:2010-02-23 11:23:58
【问题描述】:

当文件发生变化时,我需要编写一些代码来从目录中复制文件。

我知道 C/C++(一点点 :]),但我从未使用过 .net。我觉得好吗? 首先我使用 FSW 创建新线程,然后在发生更改时创建下一个将复制文件的线程?

【问题讨论】:

    标签: .net c++ filesystemwatcher


    【解决方案1】:

    如果您熟悉 C/C++,那么您应该使用 ReadDirectoryChangesW()。 FileSystemWatcher 是这个 API 函数的一个瘦包装器。但不可否认,更容易上手。示例 SDK 代码可用here.

    FSW/RDC 的常见问题是当您收到通知时无法访问该文件,因为正在写入该文件的应用程序已锁定该文件。您需要一个线程安全队列来存储通知,并由另一个定期尝试执行所需操作的线程清空。在处理通知时,这也是一种健康的方法,您将希望花费尽可能少的时间来避免创建大型通知缓冲区。它们是昂贵的系统资源。

    【讨论】:

      【解决方案2】:

      您描述的一种模式是让一个线程使用FileSystemWatcher 监视文件,并将事件(或文件)插入队列,而另一个线程读取队列并处理事件。

      【讨论】:

        【解决方案3】:

        您在正确的轨道上,因为文件系统监视是一种操作系统功能。您可以在 .NET 中或直接在本机 C++ 中使用它。 .NET 提供了更简单的编程模型。

        请注意,根据您的要求,您可以使用 Robocopy(至少包含在 Vista 中),它可以监视目录并自动复制文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-13
          • 2011-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多