文件列表和Qt的空结果

File listing and empty result with Qt

本文关键字:结果 Qt 列表 文件      更新时间:2023-10-16

我尝试用QFileSystemWatcher监视曲目列表及其子曲目。它工作得很好,但当我捕捉到信号directoryChanged时,路径指向的repository中添加的新文件是未知的。为了知道新文件,当程序启动时,我用QDirIterator列出文件,并将结果存储在QStringList:中

dirIt = new QDirIterator(ui->lineRepProjets->text(), QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
fileList = new QStringList();
while (dirIt->hasNext())
{
qDebug() << "FILE : " << dirIt->fileName();
*fileList << dirIt->next();
}
delete dirIt;

之后,当我接到信号时,我会列出另一个曲目列表,并进行比较。

问题是结果不正确!如您所见,我在qDebug中打印每个找到的文件的fileName。我有这样的结果:

文件:"文件:"你好.txt"文件:"Hello.txt">

而在我的一个剧目中,我有3个文件:"Bonjour.txt"、"Hello.txt"answers"Test.txt">

所以在我的QStringList中,我有一个空字符串,我没有文件"Test.txt",我不明白我的错误在哪里。

谢谢你的帮助!

编辑:

我在你的帮助下解决了我的问题,谢谢!!最后的代码是:

QDirIterator fileIt(ui->lineRepProjets->text(), QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
fileList = new QStringList();
do
{
*fileList << fileIt.next();
} while (fileIt.hasNext());

由于上一个文件没有下一个文件,因此无法获取最后一个文件名。最后一个文件的dirIt->hasNext()返回false

http://doc.qt.io/qt-4.8/qdiriterator.html#hasNext

也许它很难看,但你可以使用这个代码:

while (dirIt->hasNext())
{
qDebug() << "FILE : " << dirIt->fileName();
*fileList << dirIt->next();
}
qDebug() << "FILE : " << dirIt->fileName();
*fileList << dirIt->next();

问题是您一直在向列表中添加下一个文件名。有一次,迭代器指向最后一个元素后面的元素,因此是空字符串。

我会把循环改为:

do
{
qDebug() << "FILE : " << dirIt->fileName();
*fileList << dirIt->fileName();
dirIt->next();
}
while (dirIt->hasNext());

我认为立即调用next很重要。这应该有效:

QString thePath("./");
QDirIterator it(thePath, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
QStringList fileList;
while (it.hasNext())
fileList.append(it.next());