一、目录操作(QDir 类)
#include <QCoreApplication>
#include <QDir>
#include <QStringList>
#include <QtDebug>
// 自定义函数实现获取目录下大小
qint64 GetDirFileInfoSizeFunc(const QString &qpath)
{
// QDir类专门用来操作路径名称或底层文件系统,可以使用相对或绝对路径来指向一个文件/目录
QDir qdirs(qpath);
qint64 qsize=0; // 存放目录占据空间
// QFileInfor类提供有关文件系统当中文件名称、路径(位置)、访问权限、文件类型等等信息
// entryInfoList函数获取过滤之后获得的文件名夹下面的文件信息列表
foreach(QFileInfo finfo,qdirs.entryInfoList(QDir::Files))
{
qsize=qsize+finfo.size();
}
// QDir::Dirs列出目录。QDir::separator()不列出文件系统当中的特殊文件
foreach(QString sDir,qdirs.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
{
qsize=qsize+GetDirFileInfoSizeFunc(qpath+QDir::separator()+sDir);
}
char uint='B';
qint64 currentdirsize=qsize;
if(currentdirsize>1024)
{
currentdirsize=currentdirsize/1024;
uint='K';
if(currentdirsize>1024)
{
currentdirsize=currentdirsize/1024;
uint='M';
if(currentdirsize>1024)
{
currentdirsize=currentdirsize/1024;
uint='G';
if(currentdirsize>1024)
{
currentdirsize=currentdirsize/1024;
uint='T';
}
}
}
}
qDebug()<<"目录占据空间为:"<<currentdirsize<<"\t"<<qPrintable(qpath);
return qsize;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 该字符串存储路径
QString strPath;
strPath=QDir::currentPath(); // 获取当前目录
qDebug()<<"当前目录为:"<<strPath<<Qt::endl;
// 调用此函数求目录占据空间的大小
GetDirFileInfoSizeFunc(strPath);
return a.exec();
}
二、QDir 类综合应用展示系统文件实战操作
#ifndef QDIRFILEVIEWS_H
#define QDIRFILEVIEWS_H
#include <QDialog>
#include <QDialog>
#include <QListWidget> // 列表框
#include <QListWidgetItem>
#include <QLineEdit> // 单行输入框/单行编辑框
#include <QDir> // 获取操作路径及底层文件系统
#include <QFileInfoList> // 获取指定目录的基本数据信息
#include <QVBoxLayout> // 垂直布局
#include <QStringList>
class QDirFileViews : public QDialog
{
Q_OBJECT
public:
QDirFileViews(QWidget *parent = nullptr);
~QDirFileViews();
private:
QLineEdit * filelineedit;//显示所选择目录的名称
QListWidget * filelistwidget;//列表框,展示目录和文件
QVBoxLayout *glayout; // 垂直布局
public:
void dispfileinfolist(QFileInfoList list); // 显示目录和文件所对应图标
private slots:
void dispdir(QDir dir);
void dispdirshow(QListWidgetItem *item);
};
#endif // QDIRFILEVIEWS_H
//.c
#include "qdirfileviews.h"
QDirFileViews::QDirFileViews(QWidget *parent)
: QDialog(parent)
{
resize(500,350);
setWindowTitle("QDir类综合控件应用测试");
filelineedit=new QLineEdit("/");
filelistwidget=new QListWidget;
glayout=new QVBoxLayout(this);
glayout->addWidget(filelineedit);
glayout->addWidget(filelistwidget);
QString root = "/";
QDir rootDir(root);
QStringList strlist;
strlist<<"*";
// entryInfoList函数获取过滤之后获得的文件名夹下面的文件信息列表
QFileInfoList list = rootDir.entryInfoList(strlist);
// 信号与槽函数连接
connect(filelineedit,SIGNAL(returnPressed()),this,SLOT(dispdir(QDir)));
connect(filelistwidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
this,SLOT(dispdirshow(QListWidgetItem*)));
// 调用此函数来显示
dispfileinfolist(list);
}
QDirFileViews::~QDirFileViews()
{
}
// 显示目录和文件所对应图标
void QDirFileViews::dispfileinfolist(QFileInfoList list)
{
filelistwidget->clear();
for (unsigned int i=0;i<list.count();i++)
{
QFileInfo tempfileinfo=list.at(i);
if(tempfileinfo.isDir())//判断是目录
{
//相对路径里常使用 “../” 来表示上一级目录
QIcon ico("../QDirFileViewProssss/dir.jpg");
QString filename = tempfileinfo.fileName();
QListWidgetItem *temp = new QListWidgetItem(ico,filename);
filelistwidget->addItem(temp);
}
else if(tempfileinfo.isFile())//判断是文件
{
QIcon ico(":/QDirFileViewProssss/file.jpg");
QString filename=tempfileinfo.fileName();
QListWidgetItem *temp=new QListWidgetItem(ico,filename);
filelistwidget->addItem(temp);
}
}
}
void QDirFileViews::dispdir(QDir dir)
{
QStringList strlist;
strlist<<"*";
QFileInfoList fileinfolist=dir.entryInfoList(strlist,QDir::AllEntries,QDir::DirsFirst);
dispfileinfolist(fileinfolist);
}
void QDirFileViews::dispdirshow(QListWidgetItem *item)
{
QDir dir;
QString str=item->text();
dir.setPath(filelineedit->text());
dir.cd(str);
filelineedit->setText(dir.absolutePath());
dispdir(dir);
}