日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QDir, QFileInfo 和 QDirIterator 区别

發布時間:2024/8/24 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QDir, QFileInfo 和 QDirIterator 区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

這三個類相互有關聯,但是有不盡相同,首先從名字上看,QDir 和 QDirIterator 是針對于文件目錄的,也就是文件夾,我們知道,對于一個文件夾,可以包含很多文件,也可以包含其他文件夾,通常是一個樹的結構。文件夾里還可以包含符號鏈接,符號鏈接是指向其他文件或文件夾的一種鏈接,和Windows系統中的快捷方式有些類似,具體可參考這里。而QFileInfo主要是針對某一個具體的文件,來保存和這個文件相關的所有信息,比如文件名,路徑啥的。下面來看一個例子,是通過遞歸方法來查詢所有.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()); }} }

?

上面那個例子在遞歸函數recurseAddDir()中調用了功能函數addMp3File(),嚴重的限制了該函數的可重用性,下面來看用Iterator Pattern來實現的版本:

?

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

?

這樣設計的好處是提高了代碼可重用性,而且更簡單了,這就是Design Pattern的魅力所在。

轉載于:https://www.cnblogs.com/grandyang/p/4289564.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的QDir, QFileInfo 和 QDirIterator 区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。