最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

0. 前言

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

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

1. 解決方案

查看QFile幫助手冊(cè),其有

bool seek(qint64 pos);

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

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

代碼如下:

    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 時(shí),返回
        if(nSize < 1)
        {
            qDebug().noquote() << "無(wú)數(shù)據(jù).";
            return;
        }
        // size == 1 時(shí),跳出
        int nTmp = 0;
        while(!in.atEnd()){
            in.readLine();
            ++nTmp;
            if(nTmp > 1)
            {
                break;
            }
        }
        // 獲取1行的內(nèi)容
        if(nTmp < 2)
        {
            in.seek(0); // 將光標(biāo)移到文本開(kāi)始位置
            qDebug().noquote() << "讀取第一行 : " << in.readLine();
            return;
        }
        // size > 1時(shí),從后往前讀,當(dāng)讀到包含"\r\n"時(shí),seek位置加上"\r\n"的長(zhǎng)度,這樣位置調(diào)到最后一行開(kāi)始,讀取單行
        // 不同系統(tǒng)可能行分割不一樣,Windows平臺(tái)下是"\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); // 將光標(biāo)移到最后一行開(kāi)始
        qDebug().noquote() << "讀取最后一行 : " << in.readLine();
    }

分為三種情況:

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

2. 結(jié)果

愿你有個(gè)喜出望外的一月。

補(bǔ)充:qt文件末尾空行讀取不完的問(wèn)題

   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;
        }

這樣就會(huì)導(dǎo)致文件最后一行如果剛好是空行,就讀取不出來(lái),因?yàn)槭强兆址ǘ液竺鏇](méi)有換行符了),讀不進(jìn)來(lái),如果是文件中間的空行,雖然也是空字符串,但是這一行末尾是有換行符的(就不是空字符串了),是可以繼續(xù)讀的,就是這個(gè)原因?qū)е碌摹?/p>

解決方法:

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

總結(jié)

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

相關(guān)文章

  • C++ lambda函數(shù)詳解

    C++ lambda函數(shù)詳解

    小編可以明確告訴大家:lambda函數(shù)是C++11中最重要的,使用最廣泛的,最具現(xiàn)代風(fēng)格的內(nèi)容,lambda函數(shù)的出現(xiàn)改變了C++編程的思維方式。所以快和小編學(xué)習(xí)一下C++11中l(wèi)ambda函數(shù)的使用吧
    2023-02-02
  • 詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

    詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

    這篇文章主要為大家詳細(xì)介紹了c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之自定義函數(shù)

    C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之自定義函數(shù)

    自定義函數(shù): 必須直接或間接在main中調(diào)用,否則該自定義函數(shù)不會(huì)被執(zhí)行。 返回值類(lèi)型 函數(shù)名(參數(shù)類(lèi)型 參數(shù)名,參數(shù)類(lèi)型 參數(shù)名...)
    2017-10-10
  • C++多態(tài)的示例詳解

    C++多態(tài)的示例詳解

    多態(tài)按字面的意思就是多種形態(tài)。當(dāng)類(lèi)之間存在層次結(jié)構(gòu),并且類(lèi)之間是通過(guò)繼承關(guān)聯(lián)時(shí),就會(huì)用到多態(tài)。本文將通過(guò)三個(gè)小案例讓大家更深入的了解一下C++的多態(tài),感興趣的可以了解一下
    2022-06-06
  • C++實(shí)現(xiàn)簡(jiǎn)單職工信息管理系統(tǒng)

    C++實(shí)現(xiàn)簡(jiǎn)單職工信息管理系統(tǒng)

    本文給大家分享的是使用C++實(shí)現(xiàn)簡(jiǎn)單的職工信息管理系統(tǒng)的代碼,本系統(tǒng)采用了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,所有的方法均以類(lèi)為基礎(chǔ),感興趣的小伙伴們可以參考一下
    2015-08-08
  • 簡(jiǎn)單了解C語(yǔ)言中主線(xiàn)程退出對(duì)子線(xiàn)程的影響

    簡(jiǎn)單了解C語(yǔ)言中主線(xiàn)程退出對(duì)子線(xiàn)程的影響

    這篇文章主要介紹了簡(jiǎn)單了解C語(yǔ)言中主線(xiàn)程退出對(duì)子線(xiàn)程的影響,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • c語(yǔ)言連接mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    c語(yǔ)言連接mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    C語(yǔ)言連接mysql數(shù)據(jù)庫(kù),需要相應(yīng)的頭文件和lib文件,如果你安裝Mysql數(shù)據(jù)庫(kù),會(huì)在安裝目錄下找到這些庫(kù)文件,如果沒(méi)有安裝,也可以在網(wǎng)上找到
    2012-05-05
  • C/C++中的回調(diào)用法詳細(xì)講解

    C/C++中的回調(diào)用法詳細(xì)講解

    這篇文章主要介紹了回調(diào)函數(shù)在C/C++中的重要意義及應(yīng)用,回調(diào)函數(shù)通過(guò)將函數(shù)作為參數(shù)傳遞,實(shí)現(xiàn)了模塊的解耦、靈活性和可擴(kuò)展性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針)

    C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(116.每個(gè)節(jié)點(diǎn)的右向指針),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 探討:C++實(shí)現(xiàn)鏈?zhǔn)蕉鏄?shù)(用非遞歸方式先序,中序,后序遍歷二叉樹(shù))

    探討:C++實(shí)現(xiàn)鏈?zhǔn)蕉鏄?shù)(用非遞歸方式先序,中序,后序遍歷二叉樹(shù))

    本篇文章是對(duì)用C++實(shí)現(xiàn)鏈?zhǔn)蕉鏄?shù)(用非遞歸方式先序,中序,后序遍歷二叉樹(shù))的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

宜宾市| 宜黄县| 巴林右旗| 阿拉善左旗| 肇东市| 会宁县| 望城县| 香河县| 青冈县| 依安县| 呼和浩特市| 江川县| 浠水县| 安庆市| 文化| 尼勒克县| 建德市| 马鞍山市| 盘山县| 彩票| 红原县| 宿迁市| 比如县| 诏安县| 舟曲县| 洛阳市| 正定县| 惠东县| 房山区| 金沙县| 黑河市| 县级市| 武夷山市| 西安市| 辉县市| 环江| 政和县| 凯里市| 辽宁省| 寻乌县| 洛浦县|