首页 > 解决方案 > 如何通过 Win API 监控文件更改

问题描述

我需要监视特定文件集(或仅一个文件)的更改,并让 Windows 向我的应用程序报告。大多数文件可能都在同一个目录中,但我更喜欢每个文件的监控系统。

我找到了这个例子http://codewee.com/view.php?idx=20 但是这个例子只监控特殊的桌面文件夹。

首先通过调用SHGetSpecialFolderLocation ,然后在SHChangeNotifyRegister函数中使用生成的 LPITEMIDLIST (通过SHChangeNotifyEntry结构)

我无法将其推广到任意目录。MS Docs 说将来无论如何都不会支持 SHGetSpecialFolderLocation ,应该改用SHGetFolderLocation 。

但同样,SHGetFolderLocation已被弃用,甚至没有提到它没有字符串/路径参数。

是否有任何方便的函数可以获取目录路径或完整的文件名并生成 LPITEMIDLIST,然后可以将其粘贴到SHChangeNotifyRegister中?

标签: c++winapi

解决方案


FindFirstChangeNotification等。

ReadDirectoryChangesW,ReadDirectoryChangesExW

SHParseDisplayName可用于将文件路径转换为PIDL​​, 用于SHChangeNotifyRegister


推荐阅读