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

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

【讨论】:

以上是关于获取每个目录或子目录中第一个文件的路径的主要内容,如果未能解决你的问题,请参考以下文章

遍历目录中的所有文件并从每个文件中获取平均值

获取GO中路径的第一个目录

从文件路径中删除第一个目录组件

使用 Swift 获取最后一个目录中的文件名和完整目录路径

java创建目录或文件夹的方法?

linux 文件路径截取 basename,dirname