【问题标题】:Modify and append extra lines in a file在文件中修改和追加额外的行
【发布时间】:2021-05-17 15:51:47
【问题描述】:

我有点卡在打开文件并在 Qt 中修改它。 我有一个包含一些内容的文件。现在我想打开它并添加几行。

比如我这里打开文件

void MainWindow::on_pushButton_readlog_clicked()
{
    QString filename = "logfilename.txt";
    QFile originalFile(filename);

    if(!originalFile.open(QIODevice:: QIODevice::ReadWrite))
    {
        qDebug () << "Error opening Log file: "<<originalFile.errorString();
        return;

    }
    else
    {
        QTextStream instream(& originalFile);
        QString line = instream.readLine();
        while(!instream.atEnd())
        {
            QString line =instream.readLine(); // I can read line by line
            qDebug()<<line;
        }
        originalFile.close();

    }

}

基本上在这里我想保留文件的所有内容,但在前两行添加两个额外的文本: 第 1 行:“名称:ODL12” 第 2 行:“设备 ID:45R”

看起来我需要“追加”,但不知道如何在 Qt 中执行此操作

【问题讨论】:

  • 我已经“发布”了一个更新

标签: c++ qt


【解决方案1】:

创建一个新文件并将内容(写入)复制到原始文件+ mods,删除新文件或旧文件并重命名。

https://www.cplusplus.com/reference/fstream/ofstream/

https://www.codevscolor.com/c-plus-plus-delete-a-file

https://cplusplus.com/reference/cstdio/rename/

也许这对你有用……更容易。

#include <fstream>
#include <sstream>
#include <vector>
#include <string>

#include <iostream>

#include <ctime>

using namespace std;

typedef std::vector<string> Vector;

void readReadFile(string &fileName, Vector &array){
    std::ifstream file(fileName);
    if(file.fail()){
            //File does not exist code here
            std::cout << "File doesn't exist." << endl;
            return;
        }
    else{
        std::string str;
        while (std::getline(file, str)) {
            array.push_back(str);
        }
        file.close();
    }

}

void appendstuff(string text, Vector &array){
    array.push_back(text);
}

void writebacktofile(string &fileName, Vector &array){
    // https://stackoverflow.com/questions/17032970/clear-data-inside-text-file-in-c
    std::ofstream myfile;
    myfile.open(fileName, std::ofstream::out | std::ofstream::trunc);
    //myfile.close();

    // write vector back to file
    //ofstream myfile;
    //myfile.open (fileName);
    for(auto& k : array)
        myfile << k << "\n";
    myfile.close();
    array.clear();
}

int main(){
    std::clock_t start;
    double duration;
    start = std::clock();

    Vector temporary;

    string fileName = "input.txt";
    readReadFile(fileName, temporary);

    appendstuff("hello", temporary);
    appendstuff("howdy", temporary);

    writebacktofile(fileName, temporary);

    duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
    std::cout<<"printf: "<< duration << " seconds" << '\n';

    return 0;
}

执行时间:0.000295 秒

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2017-06-29
    • 2011-10-10
    • 1970-01-01
    • 2017-08-11
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多