ファイルの先頭に追記したかった。
成果物
ソースコード
要点を抜粋。
#include <QFile> #include <QDir> #include <QTextStream> #include <QMessageBox> #include <QDebug> #include <QDateTime> void MainWindow::on_lineEdit_returnPressed() { QString filePath = QDir(QApplication::applicationDirPath()).filePath(tr("memo.tsv")); QFile file(filePath); //if (!file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) if (!file.open(QIODevice::WriteOnly | QIODevice::Append)) { QMessageBox::information(this, tr("ファイルが開けませんでした"), file.errorString()); return; } file.seek(0); QDateTime dt = QDateTime::currentDateTime(); QString line = dt.toString("yyyy-MM-dd HH:mm:ss.zzz") + tr("\t") + ui->lineEdit->text(); QTextStream out(&file); out.seek(0); out << line << endl; qDebug() << line; file.close(); }
調べる
ランダムアクセスするときはテキストモードでなくバイナリモードでないとダメみたい。
C言語ならfopen()
関数にモードを指定するときb
を与えるんだったっけ? Qtではバイナリモードらしきものが存在しない。QIODevice::Text
を付与しなければいいのか?
所感
ファイルを最初から作成し直すことでしか先頭に追記できないみたい。なら日にちごとにファイル分割したり、メモリ上でソートしたほうがいいか。DBにするのが最善か。