【问题标题】:Recursive Use of ReadDirectoryChanges递归使用 ReadDirectoryChangesw
【发布时间】:2011-09-04 20:26:45
【问题描述】:

我想以递归方式查看目录中的所有更改,即如果正在查看C:\,我想接收通知

C:\1.txt
C:\A\1.txt

如果我在启用watchSubtree 选项的情况下使用ReadDirectoryChanges,它只会报告

C:\1.txt
C:\A

它不能递归工作。

我怎样才能让它递归地工作?我真的需要为每个子目录反复调用ReadDirectoryChanges吗?如果创建了新的子目录/删除了子目录怎么办?

感谢您的帮助。

【问题讨论】:

  • @Smasher,ReadDirectoryChanges 函数可以递归工作,可能问题出在你的函数实现中。请分享你正在使用的代码以获得帮助。
  • @RRUZ:如果你是对的,我会非常高兴,但我不这么认为。我在这个答案中使用@mghie 发布的代码:stackoverflow.com/questions/863135/… 他也提到了这个事实。这篇博客文章qualapps.blogspot.com/2010/05/… 也说明了这一点,但也没有解决方案。
  • @RRUZ: 明确一点:它确实报告了C:\A\1.txt 的更改,但通知中的文件名是C:\A 而不是C:\A\1.txt
  • 我在那些文章中没有看到关于 bWatchSubtree 参数不起作用的任何内容,除了 Stack Overflow 的答案提到了一个关于文件删除的警告以及您将如何不会收到通知每一个文件。请详细说明什么不起作用以及您的期望。另请注意反对使用此 API 监控整个驱动器更改的建议。为此使用变更日志。
  • @Smasher 试试这个实现koders.com/delphi/…,我刚刚测试并且工作正常(这意味着报告修改的文件的全名),只需要进行一些更改以在 delphi XE 中省略警告。只是一个提示,在过去,当我尝试使用 ReadDirectoryChanges 函数递归地监视系统根文件夹时,我遇到了问题(一些通知丢失了)。检查此示例图像,该图像在通知dl.dropbox.com/u/12733424/MonitorDemo.png 中显示完整文件名

标签: windows delphi file-io delphi-xe


【解决方案1】:

您可以查看DirectoryWatch 组件,该组件有效。我在生产代码中使用它,所以我知道它可以正常工作,即使对于子目录也是如此。

【讨论】:

  • 我接受这个,因为它帮助我做对了。感谢@RRUZ 提供的良好链接。顺便说一句:您是否处理代码中的缓冲区溢出情况?
【解决方案2】:

如果您想查看整个磁盘,您可能需要change journals

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多