Qt之遍历文件夹(entryInfoList本身不递归)
Posted 乌托邦2号
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt之遍历文件夹(entryInfoList本身不递归)相关的知识,希望对你有一定的参考价值。
关于Qt操作文件夹、文件的知识用途较多,比如遍历下一层乃至所有子孙文件、文件夹,获取它们的一些信息(大小、类型、最后更改时间等)。当然,也可以进行级联删除。 一、Qt遍历文件夹下一层的文件: 方式1: void ImageTree:: addFolderImages(QString path)三、另一种Qt实现遍历文件夹和文件目录(递归)
bool FindFile(const QString & path)
QDir dir(path);
if (!dir.exists())
return false;
dir.setFilter(QDir::Dirs|QDir::Files);
dir.setSorting(QDir::DirsFirst);
QFileInfoList list = dir.entryInfoList();
int i=0;
do
QFileInfo fileInfo = list.at(i);
if(fileInfo.fileName()=="."|fileInfo.fileName()=="..")
i++;
continue;
bool bisDir=fileInfo.isDir();
if(bisDir)
nFiles++;
std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10)
.arg(fileInfo.fileName(),10).arg(fileInfo.path()))<<endl;
FindFile(fileInfo.filePath());
else
nFiles++;
std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10)
.arg(fileInfo.fileName(),10).arg(fileInfo.path()))<<endl;
i++;
while(i<list.size());
return true;
四、其他思路
非递归:
int main(int argc, char *argv[])
QCoreApplication app(argc, argv);
QDir dir;
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = dir.entryInfoList();
std::cout << " Bytes Filename" << std::endl;
for (int i = 0; i < list.size(); ++i)
QFileInfo fileInfo = list.at(i);
std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)
.arg(fileInfo.fileName()));
std::cout << std::endl;
return 0;
递归:
QFileInfoList GetFileList(QString path)
QDir dir(path);
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i = 0; i != folder_list.size(); i++)
QString name = folder_list.at(i).absoluteFilePath();
QFileInfoList child_file_list = GetFileList(name);
file_list.append(child_file_list);
return file_list;
关于QFileInfo获取文件信息的方法可以查看API
方法如下:
void setFile(const QString &file);
void setFile(const QFile &file);
void setFile(const QDir &dir, const QString&file);
bool exists() const;
void refresh();
QString filePath() const; QString absoluteFilePath() const; QString canonicalFilePath() const; QString fileName() const; QString baseName() const; QString completeBaseName() const; QString suffix() const; QString bundleName() const; QString completeSuffix() const;
QString path() const; QString absolutePath() const; QString canonicalPath() const; QDir dir() const; QDir absoluteDir() const;
bool isReadable() const; bool isWritable() const; bool isExecutable() const; bool isHidden() const; bool isNativePath() const;
bool isRelative() const; inline bool isAbsolute() const return !isRelative(); bool makeAbsolute();
bool isFile() const; bool isDir() const; bool isSymLink() const; bool isRoot() const; bool isBundle() const;
QString readLink() const; inline QString symLinkTarget() const return readLink();
QString owner() const; uint ownerId() const; QString group() const; uint groupId() const;
bool permission(QFile::Permissions permissions) const; QFile::Permissions permissions() const;
qint64 size() const;
QDateTime created() const; QDateTime lastModified() const; QDateTime lastRead() const;
bool caching() const; void setCaching(bool on);
以上是关于Qt之遍历文件夹(entryInfoList本身不递归)的主要内容,如果未能解决你的问题,请参考以下文章