遍历cpp/h文件时,QTextStream的while(!in.atEnd())始终返回true问题求助
问题分析与解决
核心问题:文件路径错误
你创建QFile target时使用的fileInfo.fileName()仅为文件名,未包含文件所在的目录路径。如果程序当前工作目录不是你遍历的directory目录,QFile会在当前工作目录查找文件,大概率找不到目标文件,导致target.open()失败,循环代码根本不会执行;即使凑巧找到空文件,也会出现in.atEnd()初始即为true、循环不执行的情况。
解决方法:改用fileInfo.filePath()或fileInfo.absoluteFilePath()创建QFile,确保能准确定位到目标文件:
QFile target(fileInfo.filePath());
次要问题:后缀大小写不兼容
QFileInfo::suffix()返回的是文件后缀的原始大小写,比如文件名为Test.H时,返回值是"H",你的判断条件fileInfo.suffix() == "h"会不成立,导致跳过该文件。可以将后缀转为小写后再判断,兼容大小写场景:
QString suffix = fileInfo.suffix().toLower(); if (suffix == "cpp" || suffix == "h")
调试建议:增加错误日志
在target.open()失败时输出错误信息,能快速定位问题根源:
if (!target.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "打开文件失败:" << fileInfo.filePath() << "错误信息:" << target.errorString(); continue; }
内容的提问来源于stack exchange,提问作者Anothermind
相关产品推荐
相关产品推荐

