Qt,QFile 写入特定行

Posted

技术标签:

【中文标题】Qt,QFile 写入特定行【英文标题】:Qt, QFile write on specific line 【发布时间】:2012-04-06 19:16:21 【问题描述】:

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

这里有两个函数。

    第一个函数搜索文件,然后获取两个变量。一个找到下一个空行,一个获取当前 ID 号。 第二个函数应该写。但是我已经查找了有关我需要什么的文档,我用谷歌搜索了它并尝试了许多搜索都无济于事。

功能 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”替换文本文件的所有内容。

有谁知道如何在特定的行上写,或者至少到文件末尾再写?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我可能必须将其全部复制,然后放入新文件中。我尝试使用 append 但我不确定如何使用它^_^ 用 mFile.open(QFile::Append | QFile::Text) 打开文件 然后呢?我所知道的仍然没有任何功能可以在 1 行上工作... 然后写下这一行(你的out &lt;&lt; "HelloWorld" 行)。以追加模式打开文件将文件的当前指针设置到文件末尾,这是您在 Write 方法中不做的事情,因此您在文件开头写入新行。【参考方案2】:
    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();

上面的代码 sn-p 将在文件末尾附加文本 "The magic number is: 4" 。

【讨论】:

以及如何将文本写入 1000 行的第二行?

以上是关于Qt,QFile 写入特定行的主要内容,如果未能解决你的问题,请参考以下文章

Qt 写入 xml:QIODevice::write (QFile, "D:/logs.xml"): 设备未打开

如何在 Qfile 中写入而不覆盖? [复制]

将 00001010 写入 Qfile 会在前面添加另一个 Byte

文件IO操作开发笔记:使用Qt的QFile对磁盘文件存储进行性能测试以及测试工具

Qt 无法创建/写入 C:\

如何实现 qt 中qfile写出的文本 设置为unicode编码 在线等 谢谢。。。