我正在尝试读取跟踪地址文件(每个都在自己的行上)并附加到每个地址的前面。此输入文件旨在成为我正在尝试构建的缓存模拟器的引擎。我在阅读文件时遇到问题而没有进入无限循环。当我将do-while更改为在错误条件下运行时,我只为do段获得正确的输出。因此,我知道我遇到了一个无限循环的问题,我在讲述我的段时间。也许我很疲惫,无法看到这个功能的问题:
void MainWindow::readFile(){
infoLabel->setText(tr("Invoked <b>File|Open</b>"));
QString filename="trace.txt";
QString path = QDir::currentPath();
QFile file("//Users//nathan1324//Desktop//trace.txt");
//file.open(QIODevice::ReadOnly);
if(!file.exists()){
qDebug() << "File cannot be found "<<filename;
qDebug() << " " << path;
}else{
qDebug() << filename<<" Opening...";
}
QString line;
textEdit->clear();
if (file.open(QIODevice::ReadOnly | QIODevice::Text)){
QTextStream stream(&file);
do {
line = stream.readLine();
textEdit->setText(textEdit->toPlainText()+"0x"+line+"\n");
qDebug() << "line: "<<line;
} while (!line.isNull());
}
file.close();
}
有关编写此函数的替代方法的任何建议吗?
答案 0 :(得分:0)
使用atEnd检测流的结束:
bool QTextStream :: atEnd()const
如果没有更多数据要从QTextStream中读取,则返回true; 否则返回false。这类似于,但不一样 调用QIODevice :: atEnd(),因为QTextStream也考虑了它 内部Unicode缓冲区。
while (!stream.atEnd()) {
line = stream.readLine();
textEdit->setText(textEdit->toPlainText()+"0x"+line+"\n");
qDebug() << "line: "<<line;
}
答案 1 :(得分:0)
要添加项目,请使用QTextEdit的附加功能:
void QTextEdit :: append(const QString&amp; text)
在文本编辑的末尾添加带有文本的新段落。
注意:附加的新段落将具有相同的字符格式 和块格式作为当前段落,由位置决定 光标。
迭代QExtStream atEnd()
bool QTextStream :: atEnd()const
如果没有更多数据要从QTextStream中读取,则返回true; 否则返回false。这类似于,但不一样 调用QIODevice :: atEnd(),因为QTextStream也考虑了它 内部Unicode缓冲区。
<强>代码:强>
void MainWindow::readFile(){
infoLabel->setText(tr("Invoked <b>File|Open</b>"));
QString filename = "trace.txt";
QString path = QDir::currentPath();
QFile file("//Users//nathan1324//Desktop//trace.txt");
if(!file.exists()){
qDebug() << "File cannot be found "<<filename;
qDebug() << " " << path;
return;
}
QString line;
textEdit->clear();
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug() << "Could not open file" << filename;
return;
}
qDebug() << filename<<" Opening...";
QTextStream stream(&file);
while (!stream.atEnd()) {
line = stream.readLine();
if(!line.isNull()){
textEdit->append("0x"+line);
qDebug() << "line: "<<line;
}
}
file.close();
}