我编写了一个代码,用于从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;
}
答案 0 :(得分:1)
如果您希望下一个字符串位于文件的新行中,则应将新行字符添加到流\n
。
请参考您的代码:
out << str << '\n' << str2;
会使str
和str2
的内容出现在连续的行中。
除了上述内容,您还可以使用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
在流中设置正确的位置。虽然由于读写数据的长度不同,它可能会变得棘手。