QDir, QFileInfo 和 QDirIterator 区别
?
這三個(gè)類相互有關(guān)聯(lián),但是有不盡相同,首先從名字上看,QDir 和 QDirIterator 是針對(duì)于文件目錄的,也就是文件夾,我們知道,對(duì)于一個(gè)文件夾,可以包含很多文件,也可以包含其他文件夾,通常是一個(gè)樹的結(jié)構(gòu)。文件夾里還可以包含符號(hào)鏈接,符號(hào)鏈接是指向其他文件或文件夾的一種鏈接,和Windows系統(tǒng)中的快捷方式有些類似,具體可參考這里。而QFileInfo主要是針對(duì)某一個(gè)具體的文件,來保存和這個(gè)文件相關(guān)的所有信息,比如文件名,路徑啥的。下面來看一個(gè)例子,是通過遞歸方法來查詢所有.mp3文件:
?
void recurseAddDir(QDir d, bool recursive=true, bool symlinks=false ) {d.setSorting( QDir::Name );QDir::Filters df = QDir::Files | QDir::NoDotAndDotDot;if (recursive) df |= QDir::Dirs;if (not symlinks) df |= QDir::NoSymLinks;QStringList qsl = d.entryList(df, QDir::Name | QDir::DirsFirst);foreach (const QString &entry, qsl) {QFileInfo finfo(d, entry);if ( finfo.isDir() ) {QDir sd(finfo.absoluteFilePath());recurseAddDir(sd);} else {if (finfo.completeSuffix()=="mp3")addMp3File(finfo.absoluteFilePath()); }} }?
上面那個(gè)例子在遞歸函數(shù)recurseAddDir()中調(diào)用了功能函數(shù)addMp3File(),嚴(yán)重的限制了該函數(shù)的可重用性,下面來看用Iterator Pattern來實(shí)現(xiàn)的版本:
?
int main (int argc, char* argv[]) {QCoreApplication app(argc, argv);QDir dir = QDir::current();if (app.arguments().size() > 1) {dir = app.arguments()[1];}if (!dir.exists()) {cerr << dir.path() << " does not exist!" << endl;usage(); return -1;}QDirIterator qdi(dir.absolutePath(),QStringList() << "*.mp3",QDir::NoSymLinks | QDir::Files,QDirIterator::Subdirectories );while (qdi.hasNext()) {addMp3File(qdi.next());} }?
這樣設(shè)計(jì)的好處是提高了代碼可重用性,而且更簡單了,這就是Design Pattern的魅力所在。
轉(zhuǎn)載于:https://www.cnblogs.com/grandyang/p/4289564.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的QDir, QFileInfo 和 QDirIterator 区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各种类型Android源代码
- 下一篇: HDU 1728 逃离迷宫【BFS】