【发布时间】:2010-09-06 04:59:04
【问题描述】:
我是 Windows 编程新手,我正在尝试获取有关文件系统所有更改的通知(类似于来自 SysInternals 的 FileMon 显示的信息,但通过 API)。每个(非网络、非替代)驱动器的 FindFirstChangeNotification 是我最好的选择,还是有其他更合适的 C/C++ API?
【问题讨论】:
标签: c windows winapi file notifications
我是 Windows 编程新手,我正在尝试获取有关文件系统所有更改的通知(类似于来自 SysInternals 的 FileMon 显示的信息,但通过 API)。每个(非网络、非替代)驱动器的 FindFirstChangeNotification 是我最好的选择,还是有其他更合适的 C/C++ API?
【问题讨论】:
标签: c windows winapi file notifications
还有其他方法可以做到这一点,但其中大多数都需要您付出努力(或从您的应用中获取性能,或者您必须阻止线程才能使用它们,等等)。如果您不习惯处理函数指针等,FindFirstChangeNotification 会有点复杂,但它的优点是让操作系统为您完成大部分工作。
【讨论】:
FindFirstChangeNotification 很好,但要获得更强大的功能,您应该使用ReadDirectoryChangesW.(事实上,文档中甚至推荐使用它!)
它不需要函数指针,它确实需要你手动解码原始缓冲区,它使用 Unicode 文件名,但它通常更好更灵活。
另一方面,如果你想做 FileMon 所做的事情,你可能应该做 FileMon 所做的事情并使用IFS to create and install a file system filter。
【讨论】:
您可以使用 FileSystemWatcher 类。非常高效,但无法使用网络共享驱动器。
【讨论】:
实际上 FileSystemWatcher 与共享网络驱动器完美配合。我现在在一个应用程序中使用它,其中包括监视文件系统的更改。 (www.tabbles.net)。
【讨论】: