【问题标题】:How to know when and which files are changed in windows filesystem with winapi如何使用winapi知道Windows文件系统中何时以及哪些文件被更改
【发布时间】:2012-11-24 12:18:32
【问题描述】:

我为教育制作了带有间谍软件功能的程序,我需要在程序中知道文件系统何时更改文件,以及正在更改的文件。

如何在 C++ 中做到这一点?

【问题讨论】:

    标签: c++ winapi hook


    【解决方案1】:

    您可能正在寻找 Win32 Directory Change Notifications。还有一个名为 FileSystemWatcher 的 .NET API 公开了相同的功能。

    链接页面为订阅文件系统通知提供了一个很好的示例。要对文件系统更改进行更多低级访问,您必须查看Change Journals。该 API 要复杂得多,因此第一个目录更改通知可能是您最好的起点。

    为了方便起见,Linux 内核为此有一个子系统,称为inotifiy

    【讨论】:

    • 目录更改通知仅在创建或删除 whatched 目录中的某些文件时通知。这很酷,谢谢!但我需要这样的东西,但要更改文件内容。
    • 它还允许您使用FILE_NOTIFY_CHANGE_LAST_WRITE 标志查看该树中的文件更改。但是,您必须注意有关文件系统缓存的警告。
    【解决方案2】:

    在 Windows 上,查看 SHChangeNotifyRegister()。它不仅告诉您发生了什么样的更改,而且还告诉您哪些确切的文件被更改了。

    【讨论】:

    • 这个工作在 windows vista 还是 7 中?当文件系统或某些特定目录中的任何文件发生更改时,我如何使用此函数获取事件?
    • 最后一个参数指定要监控的文件夹。要监视整个文件系统,可以为每个本地驱动器号创建一个条目(跳过映射的驱动器号),或者创建一个路径设置为 NULL 的条目(但随后您将收到来自所有 shell 对象的通知,而不仅仅是本地文件系统) .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多