Мы можем найти изменение в каталоге, используя FindFirstChangeNotification()
а также FindNextChangeNotification()
функции как:
FindFirstChangeNotification(
lpDir, // directory to watch
FALSE, // do not watch subtree
FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes
Но в Windows нет реального пути для переносимых мультимедийных устройств, таких как телефоны Android, камеры и т. Д. Тогда как мы можем отслеживать изменения
(создавать, копировать, удалять, переименовывать) сделано на этих устройствах в C ++?
Эти мультимедийные устройства существуют только на уровне оболочки, они не разрешают прямой доступ к своей файловой системе (и даже если они это сделали, это может быть ext3 или какая-либо другая файловая система, не поддерживаемая Windows). Вы не можете использовать FindFirstChangeNotification
и другие функции в kernel32, вы должны использовать функции в shell32 и shlwapi, которые поддерживают IShellItem, IShellFolder и PIDLs.
Для создания PIDL вы можете позвонить SHParseDisplayName
если ты знаешь путь (shell:::{something}\{something}
) или же SHGetDesktopFolder
+ IShellFolder::EnumObjects
пройтись по всему пространству имен оболочки.
Иногда можно найти оболочку: путь, щелкнув правой кнопкой мыши вещь в панели навигации и выберите «Копировать адрес».
Если у вас есть абсолютный PIDL для папки устройства, вы можете позвонить SHChangeNotifyRegister
.
Других решений пока нет …