如何使用自动时间戳将串行输入保存到一个文本文件?

时间:2018-09-11 05:54:27

标签: qt

我想用自动时间戳将大量串行数据保存到Qt中的一个文本文件中。

这是我尝试过的:

void Measure::saveFile(QString buffer)
{
    QString  log_file = SAVE_DATA_LOG+QDateTime::currentDateTime().toString("dd.MM.yyyy_hh:mm:ss")+".txt";
    QFile file(log_file);
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    stream << buffer;
    file.flush();
    file.close();
}

问题是,每秒创建一个新文件。如何将数据保存到带有时间戳的文本文件中?

1 个答案:

答案 0 :(得分:0)

您应该删除QIODevice::Truncate标志,这将清空文件

最重要的是,您不应使用当前时间戳创建文件名。您可以使用以下代码将时间戳记写入文件:

QString log_file = SAVE_DATA_LOG + ".txt";
QFile file(log_file);
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream out(&file);
out << QDateTime::currentDateTime().toString("dd.MM.yyyy_hh:mm:ss") << data;

编辑:

我想我开始理解您的意思:您想创建一个文本文件,该文件以启动程序的日期时间命名,然后附加到该文件。所以这是我的第二次尝试:

class Measure {

  public:
    Measure():
        log_file(SAVE_DATA_LOG+QDateTime::currentDateTime().toString("dd.MM.yyyy_hh:mm:ss")+".txt"),
    {
    }

    ~Measure()
    {
    }

    void saveFile(QString buffer)
    {
        QFile file(log_file);
        file.open(QIODevice::WriteOnly | QIODevice::Append);
        QTextStream stream(&file);
        stream << buffer;
        file.flush(); //optional
        file.close();
    }

  private:
    QString log_file;
    QTextStream stream;
};

这使用构造函数创建文件名,您还可以创建一个函数来重置文件名等。