Qt, QFile пишут в определенную строку

Я столкнулся с другой проблемой в Qt, я не могу понять, как писать в определенной строке текстового файла с помощью QFile. Вместо этого стирается все написанное в начале. Итак, с данной информацией, как мне записать определенную строку в QFile?

Вот две функции.

  1. Первая функция ищет файл, а затем получает две переменные. Тот, который находит следующую пустую строку, тот, который получает текущий идентификационный номер.
  2. Вторая функция должна писать. Но я искал документацию о том, что мне нужно, я гуглил ее и пробовал много поисков, но безрезультатно.

Функция 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».

Кто-нибудь знает, как писать на определенной строке или хотя бы перейти в конец файла, а затем написать?


person Gabriel    schedule 06.04.2012    source источник


Ответы (2)


Если строка, которую вы хотите вставить в файл, всегда является последней строкой (как предлагает функция 1), вы можете попытаться открыть файл в режиме добавления, используя QIODevice::Append в своем методе Write.

Если вы хотите вставить строку в середину файла, я полагаю, что простой способ — использовать временный файл (или, если это возможно, загрузить строки в QList, вставить строку и записать список обратно в файл)

person Gianluca    schedule 06.04.2012
comment
Возможно, мне придется скопировать все это, а затем поместить в новый файл. Я пробовал использовать append, но не знаю, как его использовать ^_^ - person Gabriel; 07.04.2012
comment
откройте файл с помощью mFile.open(QFile::Append | QFile::Text) - person Gianluca; 07.04.2012
comment
и что потом? Я до сих пор не знаю никаких функций, которые бы работали на 1 строке... - person Gabriel; 07.04.2012
comment
а затем напишите строку (ваша строка out << "HelloWorld"). Открытие файла в режиме добавления устанавливает текущий указатель файла на его конец, чего вы не делаете в своем методе Write, и поэтому вы пишете новую строку в начале файла. - person Gianluca; 07.04.2012

    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();

Приведенный выше фрагмент кода добавит текст «Волшебное число: 4» в конец файла.

person Soumya Kundu    schedule 06.04.2012
comment
А как написать текст до, скажем, 2-й строки 1000? - person Neurotransmitter; 29.08.2016