获取每个目录或子目录中第一个文件的路径
Posted
技术标签:
【中文标题】获取每个目录或子目录中第一个文件的路径【英文标题】:Get the path of first file in each directory or sub-directory 【发布时间】:2020-06-02 16:20:23 【问题描述】:我的目录结构如下: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;
【问题讨论】:
【参考方案1】: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;
【讨论】:
谢谢你的回答,但这并没有给我文件夹中第一个文件的路径,而是所有文件的路径。【参考方案2】:请考虑使用 file1.txt 作为过滤器在 root 上递归迭代
示例#:
QDirIterator it("/home/root", QStringList() << "file1.txt", QDir::NoFilter, QDirIterator::Subdirectories);
while (it.hasNext())
qDebug() << it.next();
这将直接打印类似的调试消息
/Root/SubDir1/file1.txt
/Root/SubDir3/SubSubDir1/file1.txt
/Root/SubDir4/SubSubDir2/file1.txt
阅读文档了解更多信息:
https://doc.qt.io/qt-5/qdiriterator.html
【讨论】:
以上是关于获取每个目录或子目录中第一个文件的路径的主要内容,如果未能解决你的问题,请参考以下文章