Я разрабатываю приложение для Windows с помощью Qt, и мне нужно обнаружить изменения в определенной папке.
Поэтому я использовал QFileSystemWatcher и подключаю сигнал directoryChanged к функции, которая будет отправлять сообщение в случае изменений.
Проблема в том, что функция «slot», подключенная к directoryChanged, не вызывается, если я изменяю содержимое файла, а только когда файл или каталог удаляется или добавляется.
Однако в документации говорится, что этот сигнал испускается, когда «каталог по указанному пути» изменяется (например, при добавлении файла, модифицированный или удален) или удален с диска. «
У кого-нибудь есть объяснение?
Заранее спасибо =)
Согласно версии исходного кода Qt 4.8.2, следующим образом:
void QFileSystemWatcherPrivate::_q_directoryChanged(const QString &path, bool removed)
{
Q_Q(QFileSystemWatcher);
if (!directories.contains(path)) {
// perhaps the path was removed after a change was detected, but before we delivered the signal
return;
}
if (removed)
directories.removeAll(path);
emit q->directoryChanged(path);
}
Кажется, что directoryChanged испускает, когда файл удален, добавлен (для нового добавленного файла не содержится в каталогах) и переименован. Реализация не гарантирует обнаружение модификации содержимого файла. Надеюсь, это поможет: P
Других решений пока нет …