2014-09-04 7 views
0

Я смотрю каталог, рекурсивно использующий QFileSystemWatcher. И я не могу переименовать/удалить родительский каталог программно или вручную, если его подкаталоги просматриваются.QFileSystemWatcher блокирует каталог в Windows

При попытке переименования вручную через систему я получаю окно с сообщением «Действие не может быть завершено, потому что папка/файл в нем открывается в другой программе» и при переименовании программно он терпит неудачу.

Я получил эти подобные ошибки, но не разрешение:

http://qt-project.org/forums/viewthread/10530

https://bugreports.qt-project.org/browse/QTBUG-7905

Я не наблюдал. и .. как сказано в приведенной выше ссылке, но все же каталог заблокирован.

В случае программного переименования. Я пробовал обходное решение: 1. Удалите все пути подкаталога от наблюдателя до переименования родителя. 2. Переименуйте родительский элемент. 3. Добавьте пути подкаталога снова.

Но и здесь моя программа не работает на первом шаге. QFileSystemWatcher :: removePath() возвращает false при попытке удалить путь подкаталога, а QFileSystemWatcher :: directories() показывает эту директорию в отслеживаемых путях. То же, что размещено здесь https://bugreports.qt-project.org/browse/QTBUG-10846

Поскольку шаг 1 здесь не работает, шаг 2 также терпит неудачу, и я не могу переименовать родительский каталог.

Я использую Qt5.2.1 и Windows 7.

Пожалуйста, помогите мне с разрешением.

ответ

0

Это ошибка в QFileSystemWatcher, как обсуждалось here

После нескольких дней безуспешных попыток, я наконец-то смог найти решение моей проблемы с помощью Win32 API для просмотра каталогов на платформе Windows. Я написал сообщение в блоге о том, как использовать Win32 Api для отслеживания изменений каталога. Я хотел бы поделиться ссылкой, чтобы она помогла другим, кто приземлился здесь, чтобы найти решение той же проблемы. Win32 API to monitor Directory Changes