我们可以使用FindFirstChangeNotification()
和FindNextChangeNotification()
函数找到目录中的更改:
FindFirstChangeNotification(
lpDir, // directory to watch
FALSE, // do not watch subtree
FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes
但是在Windows中,没有像Android手机,相机等媒体便携式设备的实际路径。那么我们如何跟踪这些变化 (创建,复制,删除,重命名)在C ++中在这些设备上完成了吗?
答案 0 :(得分:2)
这些媒体设备仅存在于shell级别,它们不允许直接访问其文件系统(即使它们确实存在,也可能是ext3或Windows不支持的其他文件系统)。你不能在kernel32中使用FindFirstChangeNotification
和其他函数,你必须使用支持IShellItem,IShellFolder和PIDLs的shell32和shlwapi中的函数。
要创建PIDL,如果您知道路径(shell:::{something}\{something}
)或SHGetDesktopFolder
+ IShellFolder::EnumObjects
以遍历整个shell命名空间,则可以调用SHParseDisplayName
。
有时可以通过右键单击Explorer痕迹栏中的项并选择"复制地址"来找到shell:path。
如果您对设备文件夹有绝对PIDL,则可以拨打SHChangeNotifyRegister
。