QT,在文件中写入新行

时间:2016-11-30 19:32:33

标签: c++ qt

我编写了一个代码,用于从GUI中的line_Edit读取,并写入文件。代码从行编辑中读取文本并将其写入文件中,但是它们连续打印而没有任何空格,我想在行编辑中以不同的行打印文本。该文件有书面文字,只想用用户输入的单词替换每行的第一个单词。

要写入文件的代码:

void MainWindow::on_write_btn_clicked(){
    QString str, str2, lin;
    str = ui->lineEdit->text();
    str2 = ui->lineEdit2->text();
    QFile file1("sample.txt");
    if(file1.open(QIODevice::ReadWrite | QIODevice::Text)){
        QTextStream out(&file1);
        out << str;
        lin = out.readLine();
        out << str2;
        file1.seek(30);
        file1.close();
    }
    else
        return;
}

我们要写的文件: file in which we want to write

1 个答案:

答案 0 :(得分:1)

如果您希望下一个字符串位于文件的新行中,则应将新行字符添加到流\n。 请参考您的代码:

out << str << '\n' << str2;

会使strstr2的内容出现在连续的行中。

除了上述内容,您还可以使用endl中的QTextStream操纵器:

out << str << endl << str2;

要使其正常工作,您需要使用QIODevice::Text打开文件,并确保您指定的endl实际上来自QTextStream(不是std) 另请注意,由于您可能只想编写文件,因此无需使用ReadWrite选项打开文件,WriteOnly就足够了。

编辑根据更多详情:

要替换文件每行的第一个单词,您可以执行以下操作。打开两个文件,一个将被读取,另一个用于写入修改后的数据。迭代完所有行后关闭文件,删除原始文件并重命名输出文件以替换原始文件。示例实施:

QFile fileIn("textIn.txt"), fileOut("textOut.txt");
fileIn.open(QFile::ReadOnly); // check result
fileOut.open(QFile::WriteOnly); // check result

QTextStream streamIn(&fileIn), streamOut(&fileOut);
const QChar delimeter = ' ';
while (!streamIn.atEnd())
{
    QStringList list = streamIn.readLine().split(delimeter);
    if (list.size() > 0) // in case of empty line
        list[0] = "substitutedText"; // here put the text you want to set
    streamOut << list.join(delimeter) << "\r\n"; // or endl
}
fileIn.close();
fileOut.close();

fileIn.remove(); // check result
fileOut.rename(QFileInfo(fileIn).absoluteFilePath()); // check result

当然,您可以尝试使用ReadWrite修饰符打开的原始文件进行替换,并使用seek在流中设置正确的位置。虽然由于读写数据的长度不同,它可能会变得棘手。