成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt 文件處理詳細(xì)講解教程 下篇

移動(dòng)開發(fā)
本文介紹的是Qt 文件處理的內(nèi)容,有讀寫文本類、操作二進(jìn)制類、QTemporaryFile臨時(shí)類,等一些常用的類的介紹。

接著我我們上一篇內(nèi)容講,Qt 文件處理詳細(xì)講解教程 上篇。主要介紹了目錄操作和文件的管理、監(jiān)視文件系統(tǒng)的變化、 文件引擎一些知識(shí)。

目錄操作和文件管理

QDir類具有存取目錄結(jié)構(gòu)和內(nèi)容的能力。使用QDir可以操作目錄,存取目錄或文件信息,操作底層文件系統(tǒng),而且還可以存取Qt的資源文件Qt使用/作為通用的目錄分割符和URL路徑分隔符。Qt可以使用相對(duì)路徑和絕對(duì)路徑指向一個(gè)文件,isRelative()和isAbsolute()函數(shù)可以判斷QDir對(duì)象使用的是相對(duì)路徑還是絕對(duì)路徑。將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑使用makeAbsolute()函數(shù)。目錄路徑可以通過path()函數(shù)返回,通過setPath()函數(shù)設(shè)置新路徑,絕對(duì)路徑使用absolutePath()返回。

目錄名可以使用dirName()返回。目錄的路徑可以通過cd() cdUp()改變,可以使用mkdir()創(chuàng)建目錄,rename()改變目錄名。判斷目錄是否存在可以使用exists(),目錄的屬性可以使用 isReadable(),isAbsolute(),isRelative()和isRoot()來獲取,目錄下有很多條目,包括文件,目錄和符號(hào)鏈接,總的條目數(shù)可以使用count()來統(tǒng)計(jì)。entryList()可以返回目錄下所有條目組成的字符串鏈表,文件可以使用remove()函數(shù)刪除,rmdir()刪除目錄。

linux du命令

  1. int main(int argc, char **argv)  
  2. {  
  3.    QCoreApplication app(argc,argv);  
  4.    QStringList args=app.arguments();  
  5.    QString path;  
  6.    if(args.count()>1)  
  7.      path=args[1];  
  8.    else  
  9.      path=QDir::currentPath();  
  10.    qDebug()<    du(path);  
  11.    return 0;  
  12. }  
  13. qint64 du(const QString &path)  
  14. {  
  15.     QDir dir(path);  
  16.     qint64 size=0;  
  17.     foreach(QFileInfo fileInfo,dir.entryInfoList(QDir::Files))  
  18.        size+=fileInfo.size();  
  19.     foreach(QString subDir,dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))  
  20.        size+=du(path+Dir::separator()+subDir);  
  21.     char unit=\\\'B\\\';  
  22.     if(curSize>1024)  
  23.     {  
  24.        curSize/=1024;  
  25.        unit=\\\'K\\\';  
  26.        if(curSize>1024)  
  27.        {  
  28.           curSize/=1024;  
  29.           unit=\\\'M\\\';  
  30.           if(curSize>1024)  
  31.           {  
  32.             curSize/=1024;  
  33.             unit=\\\'G\\\';  
  34.           }  
  35.         }  
  36.      }  
  37.      cout<      return size;  

函數(shù)du()中,entryInfoList(QDir::Files)函數(shù)返回文件信息,然后根據(jù)這些信息計(jì)算文件大小,接下來判斷是否有子目錄,如果有則遞歸計(jì)算。dir.etnryList(QDir::Dirs|QDir::NoDotAndDotDot)返回所有子目錄并過濾掉. .. 目錄。由于windows(),linux平臺(tái)/ \差異,使用QDir::separator()函數(shù)來返回特定平臺(tái)的目錄分隔符。另外QDirIterator可以完成

枚舉目錄的功能,Qt4.3還引入了文件搜索前綴的概念,文件搜索前綴時(shí)至少由兩個(gè)字符組成,用來搜索指定文件的路徑。

  1. QDir::setSearchPaths("docs",QStringList("c:\My Docments"));  
  2. QDir::addSearchPaht("Docs",QStringList("D:|Documents"));  
  3. QFile file("docs::qt4.doc"); 

這樣就可以在兩個(gè)目錄中查找。

文件管理

QFileInfo類提供了與系統(tǒng)無關(guān)的文件信心,它能提供文明名和路徑,存取權(quán)限,以及文件是否為目錄或符號(hào)鏈接,文件大小,以及***修改/讀取的時(shí)間等。

QFileInfo也能從資源中獲取信息。QFileInfo可以使用相對(duì)路徑或絕對(duì)路徑。文件名可以在QFileInfo的構(gòu)造函數(shù)中傳遞,也可以使用setFile()函數(shù)指定,要判斷一個(gè)函數(shù)是否存在,使用exits()函數(shù),文件大小可以通過size()函數(shù)獲取,文件類型可以通過isFile(),isDir(),isSymLink()來獲取,symLinkTarget()函數(shù)返回符號(hào)鏈接所指向的真正文件名。QFileInfo提供refresh函數(shù)刷新文件信息,如果需要QFileInfo每次從文件系統(tǒng)讀取信息,二不是從緩存讀取,可以使用setCaching(false)關(guān)閉緩存。

文件名和目錄可以通過path()和fileName()分解,fileName()返回的部分可以通過baseName()和extension()來獲得主文件名和擴(kuò)展文件名,文件的操作日期可以通過created(),lastModified()和lastRead()獲取,文件的存取權(quán)限可通國isReadable,isWriteable(),isExcutetable()獲取,文件的屬主可以通過owner(),ownerId,group(),groupId()獲取,文件的權(quán)限和屬主也可以通過 permission()一起讀取。

監(jiān)視文件系統(tǒng)的變化

在Qt中可以使用QFileSystemWatcher類來監(jiān)視文件和目錄的改變.使用addPath()函數(shù)來監(jiān)視指定的文件和目錄,如果需要監(jiān)視多個(gè)目錄,使用addPaths()來加入監(jiān)視,如果要一處不需要監(jiān)視的目錄,可以使用removePath(),removePaths()函數(shù).當(dāng)監(jiān)視的文件被修改或刪除時(shí),產(chǎn)生一個(gè)fileChanged()信號(hào),如果被監(jiān)視的目錄被修改或刪除,產(chǎn)生directoryChanged()信號(hào),下例實(shí)現(xiàn)了監(jiān)視指定目錄的功能.

  1. #include  
  2. #include  
  3. #include  
  4. #Include"Msg.h"  
  5. using namespace std;  
  6. int main(int argc,char **argv)  
  7. {  
  8.     QApplication app(argc,argv);  
  9.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale())  
  10.       
  11.     Msg msg;  
  12.     msg.show();  
  13.     return app.exec();  
  14. }  
  15. Msg::Msg()  
  16. {  
  17.    QFont font;  
  18.    font.setPointSize(24);  
  19.    setFont(font);  
  20.    QStringList args=qApp->arguments();  
  21.    QString path;  
  22.    if(args.count()>1)  
  23.      path=args[1];  
  24.    else  
  25.      path=QDir::currentPath();  
  26.    label=new QLabel();  
  27.    label->setText(tr("監(jiān)視的目錄:")+path);  
  28.      
  29.    QVBoxLayout *layout=new QVBoxLayout;  
  30.    layout->addWidget(label);  
  31.    setLayout(layout);  
  32.      
  33.    fsWatcher.addPath(path);  
  34.    connect(&fsWatcher,SIGNAL(directoryChanged(QString)),this,SLOT(directoryChanged(QString)));  

在構(gòu)造函數(shù)中讀取命令指定的目錄作為監(jiān)視目錄,如果沒有指定則監(jiān)視當(dāng)前目錄,使用connect()函數(shù)將目錄的directroyChanged()信號(hào)和響應(yīng)函數(shù)連接.

  1. void Msg::directoryChanged(QString path)  
  2. {  
  3.     QMessageBox::information(NULL,tr("目錄變化"),path);  

文件引擎

Qt的QtDir,QFile,QFileInfo在內(nèi)部都使用一個(gè),QAbstractFileEngine.通過繼承QAbstractFileEngine,可以編寫自己的文件處理函數(shù),然后繼承QAbstractFileEngineHander注冊(cè)自己的文件引擎,然后這樣就可以使用自己的文件讀取引擎了.QAbstractFileEngineHandler是創(chuàng)建QAbstractFileEngine的類工廠.當(dāng)打開一個(gè)文件時(shí),Qt通過內(nèi)部注冊(cè)的文件引擎鏈表,選擇合適的文件引擎并創(chuàng)建相應(yīng)的引擎對(duì)象.為了安裝一個(gè)特定的文件引擎,必須繼承QAbstractFileEngineHandler并實(shí)現(xiàn)create()函數(shù).實(shí)例化引擎時(shí)Qt自動(dòng)注冊(cè)該引擎,***注冊(cè)的引擎比之前注冊(cè)的優(yōu)先級(jí)高.

如果想讀取tar文件的引擎,可以從QAbstractFileEngineHandler繼承

  1. class TarEngineHandler:public QAbstractFileEngineHandler  
  2. {  
  3.     public:  
  4.         QAbstractFileEngine *create(const QString &fileName) const;  
  5. };  
  6. create()函數(shù)返回TarEngine對(duì)象,TarEngine是文件引擎,時(shí)真正的文件處理類.  
  7. QAbstractFileEngine *TarEngineHandler::create(const QString &fileName) const  
  8. {  
  9.     return fileName.toLower().endsWith(".tar")?new TarEngine(fileName):0;  

小結(jié):Qt 文件處理的內(nèi)容介紹完了,希望本篇對(duì)你有幫助,以后有好的文章,一定與大家分享!敬請(qǐng)留言。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-17 13:18:17

Qt 文件

2011-07-01 14:20:59

Qt 事件

2011-07-04 10:33:22

QT

2011-07-06 10:46:33

Xcode

2011-07-06 10:32:07

Xcode

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2023-03-17 08:11:25

2011-04-07 17:54:22

Policing

2011-06-17 09:34:02

Qt 4.5.1 Sqlite 移植

2011-04-07 17:43:37

Shapping

2011-06-22 14:47:51

QT 多線程 QObject

2011-07-04 17:26:00

Qt SQLite

2011-06-23 18:16:59

Qt Qtopia

2011-07-05 18:40:19

QT 信號(hào) 機(jī)制

2011-02-23 15:59:00

FileZilla

2011-06-17 17:16:01

Qt Eclipse Linux

2010-02-23 14:17:20

WCF配置文件

2009-12-18 16:18:15

Fedora proc

2011-06-30 10:36:07

QT Graphics View
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美一区二区三区国产精品 | 色欧美片视频在线观看 | a视频在线播放 | 国产一区二区毛片 | 精品久久久久久久 | 国产一区二区自拍 | 国产高清在线观看 | 五月婷婷丁香婷婷 | 91久操视频 | 黄色在线观看 | 91资源在线| 亚洲国产专区 | 在线中文视频 | 久久这里只有精品首页 | 亚洲一区中文字幕 | 色综合天天天天做夜夜夜夜做 | 国产欧美日韩综合精品一 | 久久免费小视频 | 国产成人精品一区二区三区在线观看 | 日韩福利| a黄视频| 亚洲高清一区二区三区 | 欧美黄色片在线观看 | 96国产精品久久久久aⅴ四区 | 免费a大片 | 在线观看日本高清二区 | a国产一区二区免费入口 | 国产免费自拍 | 日本午夜网 | 欧美日韩在线观看一区 | 亚洲精品视频在线 | 91免费在线 | 天天干,夜夜操 | 国产一区二区三区免费视频 | 日本久久网 | www.日本国产| 亚洲视频在线免费观看 | 天堂资源 | 热re99久久精品国99热观看 | 亚洲黄色av网站 | 亚洲区视频 |