获取每个目录或子目录中第一个文件的路径
Get the path of first file in each directory or sub-directory
>我有一个目录结构如下: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
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 获取每个目录或子目录中第一个文件的路径
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- CFileFind不考虑目录的第一个文件
- glob只给出匹配模式的第一个文件
- Makefile仅跟踪第一个文件
- 查找第一个文件W通配符匹配
- 查找第一个文件/查找下一个文件不返回文件夹中的所有文件
- 查找第一个文件问题无法使任何示例正常工作。
- 提取所有文件名 - 查找第一个文件
- 查找第一个文件在根路径上失败
- 如何制作初始文件的 10 个副本,如果第一个文件是 AS-1.txt第二个应该是 AS-2.txt依此类推
- Win32 查找第一个文件非终止通配符扩展
- LINUX/C++从第二个文件中删除第一个文件中的字符串
- 如何读取两个文件并正确关闭第一个文件?C++
- C 编程 - 查找第一个文件返回Invalid_handle_value
- C++后续文件在第一个文件之后无法打开
- 如何使用C++(VS)将n个第一个文件移动到另一个目录
- 查找第一个文件总是返回INVALID_HANDLE_TRUE
- Makefile指令只编译第一个文件