0

我尝试使用 QTextStream 将一些信息保存到文本文件中。代码如下:

QFile fi(QString("result.txt"));
fi.remove();
if(!fi.open(QIODevice::Append)) {
    qDebug()<<"Cannot open file!";
    return -1;
}

QTextStream ts(&fi);
float num = 1, error = 2;
ts<<"num="<<num<<"\t"<<"error="<<error<<endl;

但是,代码不起作用。文件已创建,但没有写入任何内容,即文件为空。

经过一番研究,我发现我应该将打开模式更改为 QIODevice::Text | QIODevice::Append使代码工作。否则必须删除“\t”字符。这是否意味着 QIODevice::Text 是专门为特殊字符(如“\t”)设计的以写入文件?

4

1 回答 1

1

我无法重现。以下内容在 Qt 5.9 的 Windows、OS X 和 Linux 上完美运行。请修复您的示例,使其完整可重现。例如,使用下面的代码,让它失败。

// https://github.com/KubaO/stackoverflown/tree/master/questions/stream-49779857
#include <QtCore>

QByteArray readAll(const QString &fileName) {
   QFile f(fileName);
   if (f.open(QIODevice::ReadOnly))
      return f.readAll();
   return {};
}

int main() {
   auto tmp = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
   auto fileName = QStringLiteral("%1/com.stackoverflow.questions.49779857-result.txt")
         .arg(tmp);
   QFile file(fileName);
   file.remove();
   if (!file.open(QIODevice::Append))
      qFatal("Cannot open file!");

   QTextStream ts(&file);
   auto num = 1.0f, error = 2.0f;
   ts << "num=" << num << "\t" << "error=" << error << endl;
   file.close();

   Q_ASSERT(file.exists());
   Q_ASSERT(readAll(fileName) == "num=1\terror=2\n");
}
于 2018-04-11T16:44:29.287 回答