我刚接触VC++和编程。我的任务是在VC ++中设计一个文件监视器。
问题如下:
我需要不停地监控一些日志文件;每当某个特定的日志文件被删除(这个删除操作是由其他程序完成的),我都要打开一个TextFile,并将一些数据和时间戳写入其中。
我该怎么做呢?请帮帮我!!
我刚接触VC++和编程。我的任务是在VC ++中设计一个文件监视器。
问题如下:
我需要不停地监控一些日志文件;每当某个特定的日志文件被删除(这个删除操作是由其他程序完成的),我都要打开一个TextFile,并将一些数据和时间戳写入其中。
我该怎么做呢?请帮帮我!!
首先,您需要设置一个系统来监视该文件夹的文件事件。
要开始,请查看FindFirstChangeNotification()。
基本上,您将从中获得可等待的句柄。
然后,如果是我,我会有一个线程等待该事件。每次事件触发时,线程恢复,查询更改详细信息(哪个文件),然后执行所需操作,并再次在该句柄上休眠。
你需要一些额外的信号量或其他东西来中断这个工作线程并唤醒它,以便告诉它退出。这很容易做到:让你的线程主循环执行WaitForMultipleObjects - “唤醒信号量”和FindFirstChangeNotification句柄。当你被唤醒时,检查哪个事件通知了你,然后处理文件更改或退出。
MFC 处理方式略有不同 (略有),但使用 Win32 API 进行此操作时,您通常会使用 目录管理函数 设置一个更改通知句柄以监视文件所在的目录。然后,您可以等待该句柄,当目录内发生任何事件时,您的等待就会完成,然后您可以检查它是否是您关心的更改文件。
请参阅 FindFirstChangeNotification 和 ReadDirectoryChangesW 的文档以获取更多信息。
如果您拥有足够的权限,请尝试使用Windows管理工具(WMI)。据我所知,这也是处理文件系统事件最有效的方法。
处理或查询__InstanceDeletionEvent、__InstanceModificationEvent或__InstanceCreationEvent以分别处理删除、修改或创建事件,并过滤您想要的文件和目标路径。
查看WMI参考/C++调用。
有关完整示例,请参阅codeproject查询示例。