Как посчитать количество файлов/папок по конкретному пути?
Нужно написать что-то вроде файлового менеджера.
Как посчитать количество файлов в каждом каталоге куда я перехожу по двойному нажатию на qtreeview?
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// пример. Тут выводит количество папок в каталоге /users
QDir dir;
dir.setPath("/Users");
QStringList str = dir.entryList();
str.removeFirst();str.removeFirst();
int res = str.count();
qDebug() << res;
qDebug() << str;
//
infoList = new QFileInfoList();
model = new QFileSystemModel(this);
model->setRootPath("");
ui->treeView->setModel(model);
ui->lineEdit_filepath->setText(QDir::currentPath());
ui->lineEdit_filepath->setReadOnly(true);
}
UPD: Нужна функция подсчета размера каталогов) Моя крашится
long int MainWindow::getSize(QString path)
{
long double total_size = 0;
QDir current(path);
*infoList = current.entryInfoList();
infoList->removeFirst();infoList->removeFirst();
for(QFileInfo x : *infoList)
{
QString filename = x.fileName();
if(filename.isEmpty())
continue;
if(x.isDir())
{
if(path == "/")
total_size += getSize(path + filename);
else
total_size += getSize(path+"/"+filename);
continue;
}
else
total_size += x.size() ;
}
}
return total_size ;
}
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Надо использовать entryInfoList с параметрами.
QDir::Files - вернёт список файлов
QDir::Dirs - папок
Пример для папок:
QDir dir;
// Получить папки без папок "." и ".."
QFileInfoList d = dir.entryInfoList(QDir::Dirs | QDir::NotDot | QDir::NotDotDot);
d.count();
Для файлов аналогично.
Если надо узнать "в один проход" что есть что, то лучше определять тип объекта в цикле:
QFileInfoList d = dir.entryInfoList(QDir::NotDot | QDir::NotDotDot);
int qtyFiles = 0, qtyDirs = 0;
for(int i = 0; i < d.count(); i++) {
QFileInfo info = d[i];
if ( info.isFile() ) {
qtyFiles++;
} else if ( info.isDir() ) {
qtyDirs++;
}
}