亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt快速讀取大文件最后一行內(nèi)容解決方案

 更新時間:2024年01月10日 16:17:11   作者:FreeLikeTheWind.  
這篇文章主要給大家介紹了關(guān)于Qt如何快速讀取大文件最后一行內(nèi)容的解決方案,文中通過代碼介紹的非常詳細,對大家學(xué)習或者使用Qt具有一定的參考借鑒價值,需要的朋友可以參考下

0. 前言

有時候根據(jù)需求,需要讀取文本的最后一行內(nèi)容。

如果是小文本,按照順序讀,然后取最后一行就Ok;但如果是大文本,即使是放到線程里跑,讀取到最后一行也會有延遲,比較耗時。

1. 解決方案

查看QFile幫助手冊,其有

bool seek(qint64 pos);

意思就是查找設(shè)備中的位置。成功時返回true;否則返回false。

因此可以,從后往前一個位置一個位置查,如果包含換行符,就說明獲取到了最后一行。

代碼如下:

    QFile file("C:\\Users\\Desktop\\in.txt");
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in(&file);
        in.setCodec(QTextCodec::codecForName("UTF-8"));
        int nSize = file.size();
        // size == 0 時,返回
        if(nSize < 1)
        {
            qDebug().noquote() << "無數(shù)據(jù).";
            return;
        }
        // size == 1 時,跳出
        int nTmp = 0;
        while(!in.atEnd()){
            in.readLine();
            ++nTmp;
            if(nTmp > 1)
            {
                break;
            }
        }
        // 獲取1行的內(nèi)容
        if(nTmp < 2)
        {
            in.seek(0); // 將光標移到文本開始位置
            qDebug().noquote() << "讀取第一行 : " << in.readLine();
            return;
        }
        // size > 1時,從后往前讀,當讀到包含"\r\n"時,seek位置加上"\r\n"的長度,這樣位置調(diào)到最后一行開始,讀取單行
        // 不同系統(tǒng)可能行分割不一樣,Windows平臺下是"\r\n"
        int nIndex = 1;
        in.seek(nSize - nIndex);
        while(!in.readAll().contains("\r\n"))
        {
            ++nIndex;
            in.seek(nSize - nIndex);
        }
        in.seek(nSize - nIndex + 2); // 將光標移到最后一行開始
        qDebug().noquote() << "讀取最后一行 : " << in.readLine();
    }

分為三種情況:

  • 當文本為空時,提示或返回
  • 當文本只有一行時,輸出首行
  • 當文本 > 一行時,執(zhí)行操作

2. 結(jié)果

愿你有個喜出望外的一月。

補充:qt文件末尾空行讀取不完的問題

   QString line;
        QTextStream in(&file1);  //用文件構(gòu)造流
        
        while(1)
        {
            line=in.readLine();//循環(huán)讀取下行
            if(!line.isNull())//字符串有內(nèi)容,換行符也是內(nèi)容
            {
                lis.append(line);
            }
            else
                break;
        }

這樣就會導(dǎo)致文件最后一行如果剛好是空行,就讀取不出來,因為是空字符串(而且后面沒有換行符了),讀不進來,如果是文件中間的空行,雖然也是空字符串,但是這一行末尾是有換行符的(就不是空字符串了),是可以繼續(xù)讀的,就是這個原因?qū)е碌摹?/p>

解決方法:

        QTextStream in(&file1);  //用文件構(gòu)造流
        lis = in.readAll().split("\n");

總結(jié)

到此這篇關(guān)于Qt快速讀取大文件最后一行內(nèi)容解決方案的文章就介紹到這了,更多相關(guān)Qt讀取大文件最后一行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++的模板中typename關(guān)鍵字的用法

    詳解C++的模板中typename關(guān)鍵字的用法

    在C++的Template中我們經(jīng)常可以見到使用typename來定義類型名稱,更加具體的我們就在接下來為大家詳解C++的模板中typename關(guān)鍵字的用法,需要的朋友可以參考下:
    2016-06-06
  • 深入理解QT多線程編程

    深入理解QT多線程編程

    本文主要介紹了QT多線程編程的深入理解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-06-06
  • C語言直接選擇排序算法詳解

    C語言直接選擇排序算法詳解

    直接選擇排序就是遍歷整個數(shù)組,每遍歷一遍的目的是找出該數(shù)組中的最大數(shù)和最小數(shù)對應(yīng)的下標,然后將最小數(shù)和數(shù)組的第一個數(shù)進行交換,最大數(shù)和數(shù)組的最后一個數(shù)進行交換,然后縮小范圍再次遍歷
    2022-08-08
  • C語言代碼實現(xiàn)猜數(shù)字游戲

    C語言代碼實現(xiàn)猜數(shù)字游戲

    大家好,本篇文章主要講的是C語言代碼實現(xiàn)猜數(shù)字游戲,感興趣的同學(xué)趕快來看一看了吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Qt5實現(xiàn)文本編輯器(附詳細代碼)

    Qt5實現(xiàn)文本編輯器(附詳細代碼)

    QT是一個跨平臺的GUI開發(fā)框架,我使用的QT5 C++版本的,本文主要介紹了Qt5實現(xiàn)文本編輯器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++?Boost?Xpressive示例分析使用

    C++?Boost?Xpressive示例分析使用

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C語言學(xué)生管理系統(tǒng)源碼分享

    C語言學(xué)生管理系統(tǒng)源碼分享

    這篇文章主要為大家分享了C語言學(xué)生管理系統(tǒng)的源碼,幫助大家學(xué)習結(jié)構(gòu)體,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • C語言編程中生成隨機數(shù)的入門教程

    C語言編程中生成隨機數(shù)的入門教程

    這篇文章主要介紹了C語言編程中生成隨機數(shù)的入門教程,包括利用rand()函數(shù)來編寫隨機數(shù)生成器的示例,要的朋友可以參考下
    2015-12-12
  • C語言中反斜杠的作用及說明

    C語言中反斜杠的作用及說明

    這篇文章主要介紹了C語言中反斜杠的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言學(xué)習基礎(chǔ)知識分享

    C語言學(xué)習基礎(chǔ)知識分享

    這篇文章主要介紹了C語言學(xué)習基礎(chǔ)知識分享的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評論