如何从QTextStream创建一个QString?

9

这个能行吗?

QString bozo;
QFile filevar("sometextfile.txt");

QTextStream in(&filevar);

while(!in.atEnd()) {
QString line = in.readLine();    
bozo = bozo +  line;  

}

filevar.close();

“bozo”是否将成为“sometextfile.txt”的全部内容?

你不需要打开文件,看看我的答案就好了。 - dtech
感谢您的回答。我正在开发一个BB10应用程序,但不幸的是我无法让它正常工作。我相信问题出在我做的其他事情上。但在我找到其他错误之前,我无法选择一个答案。 - Dave
好的,它应该可以工作,这很简单明了。逐步调试您的代码,您会找到错误的地方。BB不会改变QFile,所以问题在于您的实现。 - dtech
2个回答

19

为什么要逐行读取?你可以进行一些优化,减少向字符串添加行时不必要的重新分配:

QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
QTextStream in(&file);
QString text;    
text = in.readAll();
file.close();

3
如ddiver所述,您应该首先使用file.open(...);打开文件。除此之外,是的,bozo将包含您拥有的代码中整个文件。
需要注意的一点是在ddriver的代码中,text.reserve(file.size());是不必要的,因为在接下来的行中:
text = in.readAll();

这将替换text为一个新字符串,因此调用text.reserve(file.size());就可以省略不必要的工作。

1
是的,你说得对,考虑到没有初始数据可以附加,调整字符串大小是毫无意义的。我也会修正我的答案... - dtech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接