我正在使用QTextStream阅读QFile。
QFile file("example.txt");
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull()) {
if(line.contains("DELETE"))
{
// delete line
}
line = in.readLine();
}
有没有办法删除一行?
答案 0 :(得分:5)
您可以打开文件,阅读内容,修改内容,然后将其写回文件。这是一种方法:
QFile f("myfile.txt");
if(f.open(QIODevice::ReadWrite | QIODevice::Text))
{
QString s;
QTextStream t(&f);
while(!t.atEnd())
{
QString line = t.readLine();
if(!line.contains("DELETE"))
s.append(line + "\n");
}
f.resize(0);
t << s;
f.close();
}
答案 1 :(得分:0)
据我所知,这并不简单。我能想到的最好的解决方案是逐行读取整个文件,将每一行推入QVector,然后根据需要修改容器的元素,然后将其推回到文件中。
答案 2 :(得分:0)
删除一行意味着向后移动所有其余部分。
最简单的方法是在第一次删除后在新位置写回行。
使用临时文件,如果成功则将其重命名为原始文件,是最安全的方式。
但是你从来没有写过更多的内容,所以你认为可以在同一个文件上工作。
你需要保持阅读pos并写pos。
它应该是这样的:(基于原始代码)
QFile file("example.txt");
QTextStream in(&file,QIODevice::ReadWrite);
QString line = in.readLine();
qint64 rpos,wpos=0;
bool shift = false;
while (!line.isNull()) {
rpos = in.pos();
if(!line.contains("DELETE"))
{
if(shift){
in.seek(wpos);
in<<line<<endl;
wpos = in.pos();
in.seek(rpos);
} else{
wpos = rpos;
}
}else{
shift = true;
}
in.seek(rpos);
line = in.readLine();
}
file.resize(wpos);