Мне нужно контролировать файловую систему, у меня есть функция, которая рекурсивно просматривает папки и файлы и добавляет их путь к моему QFileSystemWatcher:
void watchFileSystem(const QDir& dir, QFileSystemWatcher& watcher)
{
watcher.addPath(dir.absolutePath());
QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirectories);
while (iterator.hasNext()) {
QString foldername = QString(iterator.fileName());
if (foldername != "." && foldername != ".." && foldername != "")
watcher.addPath(iterator.filePath());
iterator.next();
if (!iterator.fileInfo().isDir()) {
watcher.addPath(iterator.filePath());
}
}
}
Во время работы каждый «watcher.addPath (iterator.filePath ());» У меня есть это сообщение об ошибке в консоли:
QFileSystemWatcher: не удалось добавить пути: C: /…/ anyfile.ext
Самое странное, что это все равно работает. Когда я переименовываю / редактирую файл или папку, запускаются события fileChanged и folderChanged.
Кто-нибудь имеет представление о том, что происходит?
Меня беспокоит нестабильность моей программы, эту ошибку нельзя показать даром.
Спасибо за чтение и помощь,
Рафаэль.
Предупреждение отображается потому, что ваш цикл добавляет файлы дважды:
В середине цикла вы делаете iterator.next();
,
Если это перемещает итератор в файл, он будет добавлен в следующем операторе if. Теперь ваш цикл продолжается, но все еще указывает на тот же файл. Если имя файла не «.», «..» или «», что не относится к файлу, тот же файл добавляется снова.
Я реструктурировал ваш цикл, чтобы он заработал:
while (iterator.hasNext())
{
QString fileOrFolderName = QString(iterator.fileName());
// Skip non-folders
if (fileOrFolderName == "." || fileOrFolderName == ".." ||
fileOrFolderName == "")
{
iterator.next();
continue;
}
// Add the folder or file
watcher.addPath(iterator.filePath());
iterator.next();
}
Это добавит все папки и файлы ниже каталога, предоставленного функции.
Других решений пока нет …