QT QFile删除文件里的一行

昨天需要做一个日志文件删除历史记录功能,大致做完后思路如下:

1、以只读的方式打开日志文件,读入日志文件到QstringList链表

2、根据链表里的元素的时间数据项找到某个元素的索引,比如:

7 [2022-10-15 17:00:02] NOTICE 
8 [2022-10-26 19:36:02] NOTICE 

要删除10.26号之前的日志记录,索引位置找到8,删除链表里索引8之前的所有数据

3、关闭文件,重新以只写的方式打开。把修改之后的QstringList链表重新写入文件。

具体代码如下,写的不好还有优化的地方

void Log::delelte(int day)
{
    QStringList dataList;//用来保存日志文件中所有数据记录
    dataList.clear();

    file->close();
    file->open(QIODevice::ReadOnly);
//    file->open(QIODevice::ReadWrite);

    QTextStream in(file); //用来读文本
    //1、读出所有
    while(!in.atEnd()){
        QString fileLine = in.readLine(); //读一行
        dataList << fileLine; //把读到的每一行以QString的形式放到QStringList里
    }

    //2、找到索引
    int index = findIndex(day,dataList);

    //3、删掉索引之前不要的记录
    for(int i=0;i<=index;++i){
        dataList.removeFirst();
    }

    file->close();
    file->open(QIODevice::WriteOnly);
    QTextStream out(file); //用来读文本
    //4、重新写进日志文件
    for(int i=0;i<dataList.size();i++){
        out<<dataList[i]<<"\n";
    }
}

 

posted @ 2022-10-27 09:43  小头痛  阅读(888)  评论(0编辑  收藏  举报