You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:58:33