1. 查找第一次出现的,找到就退出
//目录下查找文件 找到这个文件就停止(递归嵌套深入查找),最多只有一个结果
QString find(const QString& dir_name, const QString& find_name)
{
QDir dir(dir_name);
QFileInfoList list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs |QDir::Files);
for(const QFileInfo &info : list)
{
if(info.isDir())
{
QString file_path = find(info.absoluteFilePath(), find_name);
if(!file_path.isEmpty() )
return file_path;
}
else if(info.isFile())
{
if(info.fileName() == find_name)
{
return info.absoluteFilePath();
}
}
}
return QString();
}
使用:
QString file = find("D:/test/", "a.txt");
//file = D:/test/1/3/a.txt
2. 查找多个
//查找目录下 所有包含的路径 ,可能存在多个
void finds(const QString& dir_name, const QString& find_name, QStringList &find_list)
{
QDir dir(dir_name);
QFileInfoList list = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs |QDir::Files);
for(const QFileInfo &info : list)
{
if(info.isDir())
{
finds(info.absoluteFilePath(), find_name, find_list);
}
else if(info.isFile())
{
if(info.fileName() == find_name)
{
find_list << info.absoluteFilePath();
}
}
}
}
使用demo:
QStringList list;
finds("D:/test/", "a.txt", list);
//list = {"D:/test/1/3/a.txt", "D:/test/2/a.txt", "D:/test/2/xx/a.txt"}