Qt,QFile写在特定的行上

时间:2012-04-06 19:16:21

标签: c++ qt qfile

我在Qt中遇到了另一个问题,我似乎无法弄清楚如何使用QFile在文本文件的特定行上书写。相反,一切都在开始时被删除。 因此,根据给定的信息,我将如何写入QFile中的特定行?

这是两个功能。

  1. 第一个函数搜索文件,然后获取两个变量。一个找到下一个空行,一个获取当前ID号。
  2. 第二个函数应该写。但我已经找到了我需要的文档,我用Google搜索并尝试了许多搜索无济于事。
  3. 功能1


        QString fileName = "C:\\Users\\Gabe\\SeniorProj\\Students.txt";
        QFile mFile(fileName);
        QTextStream stream(&mFile);
        QString line;
    
        int x = 1; //this counts how many lines there are inside the text file
        QString currentID;
    
        if(!mFile.open(QFile::ReadOnly | QFile::Text)){
            qDebug() << "Could not open file for reading";
            return;
        }
    
        do {
            line = stream.readLine();
            QStringList parts = line.split(";", QString::KeepEmptyParts);
    
            if (parts.length() == 3) {
                QString id        = parts[0];
                QString firstName = parts[1];
                QString lastName  = parts[2];
    
                x++; //this counts how many lines there are inside the text file
                currentID = parts[0];//current ID number
            }
        }while (!line.isNull());
    
        mFile.flush();
        mFile.close();
    
        Write(x, currentID); //calls function to operate on file
    
    }
    

    上面的函数读取文件,如下所示。

    1001;James;Bark
    1002;Jeremy;Parker
    1003;Seinfeld;Parker
    1004;Sigfried;FonStein
    1005;Rabbun;Hassan
    1006;Jenniffer;Jones
    1007;Agent;Smith
    1008;Mister;Anderson
    

    该函数获取了我认为可能需要的两位信息。我不太熟悉QFile和搜索,但我认为我需要这些变量:

    int x;  //This becomes 9 at the end of the search.
    QString currentID; //This becomes 1008 at the end of the search.
    

    所以我将这些变量传递给函数1末尾的下一个函数。Write(x, currentID);

    功能2


    void StudentAddClass::Write(int currentLine, QString idNum){
    
        QString fileName = "C:\\Users\\Gabe\\SeniorProj\\Students.txt";
        QFile mFile(fileName);
        QTextStream stream(&mFile);
        QString line;
    
        if(!mFile.open(QFile::WriteOnly | QFile::Text)){
            qDebug() << "Could not open file for writing";
            return;
        }
    
        QTextStream out(&mFile);
        out << "HelloWorld";
    }
    

    我已经省去了自己解决问题的所有尝试,所有这个功能都是用“HelloWorld”替换文本文件的所有内容。

    有没有人知道如何在特定的行上写,或者至少转到文件的末尾然后写?

2 个答案:

答案 0 :(得分:4)

如果要插入文件的行总是最后一行(如函数1所示),您可以尝试在Write方法中使用QIODevice :: Append以追加模式打开文件。

如果你想在文件的中间插入一行,我想一个简单的方法是使用临时文件(或者,如果可能的话,将行加载到QList中,插入行并写入列表回到文件)

答案 1 :(得分:0)

    QString fileName = "student.txt";
    QFile mFile(fileName);

    if(!mFile.open(QFile::Append | QFile::Text)){
        qDebug() << "Could not open file for writing";
        return 0;
    }

    QTextStream out(&mFile);
    out << "The magic number is: " << 4 << "\n";

    mFile.close();

上面的代码片段会在文件的末尾附加文本“the magic number is:4”。