【QT】遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名
前言:
需要在特定目录或磁盘下查找特定文件
一、筛选目录
(一)单一目录下遍历,筛选特定文件
QDir dir("./SaveFiles");
QFileInfoList list = dir.entryInfoList();
(二)设备所有磁盘中遍历
QFileInfoList DirInfoList = QDir::drives();
二、遍历目录和文件
在容器List中遍历每个文件信息(QFileInfo fileInfo),文件信息包含:
-
文件路径 :
fileInfo.filePath()
; -
文件全名称:
fileInfo.fileName()
; -
文件前缀:
fileInfo.baseName()
; -
文件后缀:
fileInfo.suffix()
; -
文件是否存在:
fileInfo.exists()
; -
文件大小:
fileInfo.size()
; -
是否是文件:
fileInfo.isFile()
; -
是否是目录:
fileInfo.isDir()
; -
是否是连接符:
fileinfo.isSymLink()
/
typedef struct fileNamePath
{
QString strFileName;
QString strFilePath;
}sfileNamePath;
//.cpp///
qint64 beginTime = ui->beginDateTimeEdit->dateTime().toTime_t();//先将QDateTime时间转UTC时间,在计算秒数
qint64 endTime= ui->endDateTimeEdit->dateTime().toTime_t();
QDir dir("./SavedFiles");
dir.setFilter(QDir::Files);
QStringList filters;
filters<<"*txt"; //遍历筛选特定文件(*.txt)
dir.setNameFilters(filters);
QFileInfoList list = dir.entryInfoList();
QStringList filelist;
QList<QStringList>searchFileList_list;//创建容器添加文件的名称、创建时间、大小、类型
foreach(QFileInfo fileinfo,list)
{
int index_p = fileinfo.fileName().indexOf(".");
QString fileName = fileinfo.fileName().left(index_p);//获取文件名前缀
filelist <<fileinfo.fileName() <<fileinfo.suffix();
qint64 fileTime = QDateTime::fromString(fileName,"yyyy-MM-dd hh-mm-ss").toTime_t();//QString转QdateTime
if(fileTime >=beginTime && fileTime <= endTime)
{
QStringList fileInforList;
fileInforList.append(fileName);
QString createTime = fileinfo.created().toString("yyyy/MM/dd hh:mm:ss");//文件时间
fileInforList.append(createTime);
QString kind = fileinfo.suffix();//文件类型
fileInforList.append(kind);
int size;
QString sizeStr;
size = int((fileinfo.size() + 1023) /1024);//文件大小
sizeStr = QString::number(size,'g',2) +"KB";
fileInforList.append(sizeStr);
searchFileList_list.append(fileInforList);
}
}
锦上添花:
QStringList fileter;
fileter << "*.um" << "*.stl";
QFileInfoList fileList = dir.entryInfoList(fileter, QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);