前言
需要在特定目录或磁盘下查找特定文件
一、筛选目录
(一)单一目录下遍历,筛选特定文件
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);
}
}