используя QFileSystemWatcher :: Files (), чтобы получить количество файлов в примере просматриваемой папки? счетчик всегда равен 0?

Я пытался выяснить это на выходных, но безрезультатно. Я не могу найти пример использования QFileSystemWatcher :: Файлы () Прямо так, я думал, что спросить.

У меня есть программа, которая:

  1. позволяет пользователю выбрать «исходную» папку.
  2. нажмите кнопку, чтобы начать просмотр этой исходной папки для новых файлов
  3. есть сигнал, испускаемый при помощи directoryChanged (), где я пытаюсь обновлять счетчик каждый раз, когда файл добавляется или удаляется.

Я признаю, что моя реализация QfileSystemWatcher, вероятно, не верна. но этот код работает и вызывает сигнал / слот. но счет всегда равен нулю …

из mainwindow.cpp …

сигнал:

//connect push buttons
QObject::connect(ui->startButton, SIGNAL(clicked()),
this, SLOT(startButtonClicked()));

//link qfilesystemwatcher with signals and slots
QObject::connect(&hotfolder, SIGNAL(directoryChanged(QString)), this, SLOT(hotfolderChanged()));

слоты:

void MainWindow::startButtonClicked(){

//start the file system watcher using the 'source folder button'
//first, get the resulting text from the source folder button
QString sourceText = ui->sourceBtnLineEdit->text();
ui->statusbar->showMessage(sourceText);

//convert the text from source button to a standard string.
string filePath = sourceText.toStdString();
cout << filePath << endl;

//call method to add source path to qfilesystemwatcher
startWatching(sourceText);

}

void MainWindow::hotfolderChanged(){

int fileCount = filesWatched();
ui->statusbar->showMessage(QString::number(fileCount));

}

от magickWatcher.h

#ifndef MAGICKWATCHER_H
#define MAGICKWATCHER_H

#include <QFileSystemWatcher>
#include <mainwindow.h>

//create the qFileSystemWatcher
QFileSystemWatcher hotfolder;

//add folder to qfilesystemwatcher
//starts watching of folder path
int startWatching( QString folder){

hotfolder.addPath(folder);
cout << "hotfolder created!" << endl;
return 0;
}

//get file list of folder being watched
int filesWatched(){
QStringList watchedList = hotfolder.files();

//report out each line of file list
for (int i = 0; i < watchedList.size(); ++i){
cout << watchedList.at(i).toStdString() << endl;
cout << "is this looping?!!" << endl;
}
return watchedList.count();
}#endif // MAGICKWATCHER_H

Как я могу использовать QFileSystemWatcher, чтобы получить количество файлов просматриваемой папки? Я знаю о QDir и его параметры, но хочу конкретно знать, как использовать QFileSystemWatcher.

Я все еще оборачиваюсь вокруг c ++ в целом, так что спасибо за любые советы или советы. Я думаю, возможно, моя проблема в том, как я реализую QFileSystemWatcher.

Некоторые соответствующие ссылки, которые я использовал:

QFileSystemWatcher работает только в main ()

http://doc.qt.io/qt-5/qfilesystemwatcher.html#files

0

Решение

Сначала давайте подробнее рассмотрим документы (жирный формат — мой):

QFileSystemWatcher исследует каждый путь, добавленный к нему. Файлы, которые были добавлены в QFileSystemWatcher можно получить с помощью files() функция, и каталоги, использующие directories() функция.

Так, files() возвращает только список файлов, которые вы уже добавили в наблюдатель, используя addPath() метод, а НЕ список файлов, которые неявно отслеживаются путем добавления каталога.

1

Другие решения

Вы можете получить информацию о файлах в наблюдаемом каталоге, например, используя QDir :: entryInfoList с фильтры применимо в вашем случае. По крайней мере QDir::Files и, возможно, QDir::NoDotAndDotDot будет иметь смысл.

//get file list of folder being watched
int filesWatched() {
QString folder = "/path/to/hotfolder/";
QDir monitoredFolder(folder);
QFileInfoList watchedList =
monitoredFolder.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);

QListIterator<QFileInfo> iterator(watchedList);
while (iterator.hasNext())
{
QFileInfo file_info = iterator.next();
qDebug() << "File path:" << file_info.absoluteFilePath();
}

return watchedList.count();
}
1

По вопросам рекламы [email protected]