获取每个目录或子目录中第一个文件的路径

Get the path of first file in each directory or sub-directory

本文关键字:第一个 文件 路径 子目录 获取      更新时间:2023-10-16

>我有一个目录结构如下:Root目录包含一些子目录,其中放置了许多.txt文件,或者再次包含具有相同扩展名的不同文件的一些sub-directories

├───Root
│   ├───SubDir1
└───file1.txt
│   ├───SubDir2
│   ├───SubDir3
│       └───SubSubDir1
└───file1.txt
└───file2.txt
│   └───SubDir4
│       └───SubSubDir1
└───SubSubDir2
└───file1.txt

我想将每个导演中的所有第一个文件路径保存在QStringList中。 例如:

/Root/SubDir1/file1.txt
/Root/SubDir3/SubSubDir1/file1.txt
/Root/SubDir4/SubSubDir2/file1.txt

下面的代码给了我一个目录或子目录中的所有文件路径,但没有给出每个子目录中第一个文件的路径。

QDir rootFolder("/root");
QStringList list;
QDirIterator dirIter(rootFolder.absolutePath(), QDir::AllEntries | QDir::NoSymLinks | 
QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while(dirIter.hasNext())
{
dirIter.next();
if(QFileInfo(dirIter.filePath()).isFile())
{
if(QFileInfo(dirIter.filePath()).suffix() == "txt")
{
qDebug()<<"File Path: " <<dirIter.filePath();
list.append(dirIter.next());
qDebug()<<"List: " <<list;
}
}
} 

dirIter.next()已经返回下一个值! 问题是,您在 while 循环之后跳过第一项。

编辑:如果你只想要第一个文件名,你可以这样做:

QDir rootFolder("/Users/chris/Downloads");
rootFolder.setSorting(QDir::Name);
QStringList list;
QDirIterator dirIter(rootFolder.absolutePath(), QStringList() << "*.txt", QDir::AllEntries | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
QStringList directoryList;
while(dirIter.hasNext())
{
QString filename = dirIter.next();
QFileInfo info(filename);
if(directoryList.contains(info.absolutePath()))
{
continue;
}
qDebug()<<"File Path: " << info.absoluteFilePath();
list.append(filename);
directoryList.append(info.absolutePath());
}
qDebug()<< "List: " << list;

请考虑使用 as 过滤器在 root 上递归迭代 file1.txt

示例#:

QDirIterator it("/home/root", QStringList() << "file1.txt", QDir::NoFilter, QDirIterator::Subdirectories);
while (it.hasNext())
{
qDebug() << it.next();
}

将直接打印一个 DEbug 消息,例如

/Root/SubDir1/file1.txt
/Root/SubDir3/SubSubDir1/file1.txt
/Root/SubDir4/SubSubDir2/file1.txt

阅读文档了解更多信息:

https://doc.qt.io/qt-5/qdiriterator.html