gpt4 book ai didi

c++ - QFile + QTextStream 只读文件的一部分

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:52 25 4
gpt4 key购买 nike

我正在尝试为一个项目制作 .obj 解析器。

我有一个带有 loaddata 方法的 ObjLoader 类。它逐行读取文件并根据需要进行解析。

QFile file(sourceFolder+ QString("/") +filename);
file.open(QIODevice::ReadOnly);
QTextStream textStream(&file);

QString currentString;

while (!textStream.atEnd())
{
currentString = textStream.readLine();
//Some code here without closing file(I doublechecked this)
}
file.close()

它可以很好地读取前 600 个字符串,但随后意外停止。
它发生在这些字符串上:

v 3.956570 0.532126 0.300000
v 3.958734 0.593226 -0.300000
v 3.958731 0.593220 0.300000
越南 0.0000 -0.0000 1.0000
越南 0.0000 0.0000 -1.0000
越南 0.4852 -0.8744 0.0000

但是当我尝试的时候

std::cerr "<<" currentString.toStdString() "<<" "\n";
(Sorry, don't know how to write this normally with stackoverflow formatting)

对于这些字符串,通过使用在循环中每次递增的索引“int i”,它只给出:

v 3.956570 0.532126 0.300000
v 3.958734 0.593226 -0.300000
v 3.958731 0.593220 0.300000
v

此时它停止读取文件,没有任何错误。看起来内存中的文件到这里就结束了。但它只是第 601 个字符串,当文件有 1100 多个字符串时。

我在文本编辑器中检查了文件中是否有不可打印的符号,但这部分没有。

每次当我开始调试这段代码时,它都会做同样的事情——相同的字符串在相同的符号处停止读取。为什么会发生?

最佳答案

显然 textStream.atEnd() 是 not always a reliable indicator that you're actually at the end of a stream.我会尝试 textStream.ReadAll() 并查看您是否以这种方式获取整个文件。或者,您可以只调用 textStream.readLine() 直到它返回 NULL 并使用它来中断 while 循环:

currentString = textStream.readLine();
while (!currentString.isNull())
{
//Some code here without closing file(I doublechecked this)
currentString = textStream.readLine();
}

关于c++ - QFile + QTextStream 只读文件的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com