2013-04-05 65 views
3

搜索客戶端計算機(以及其他安裝的驅動器)對圖像的最快搜索方式是什麼?我的客戶將安裝一個桌面應用程序,它是在Python,但我可以添加C++代碼,如果是快...針對特定文件搜索客戶端計算機

+0

哪個平臺基於Win32或Unix? – accfews 2013-04-05 05:52:35

+0

我用os.walk()和glob模塊做這樣的任務 – 2013-04-05 05:55:19

+0

最好是Win32和基於Unix的 – Kiarash 2013-04-05 05:58:54

回答

3

如果你的平臺是Win32中,使用C++,你可以簡單地使用WINAPI功能

FindFirstFile

FindFirstFileEx

然後

FindNextFile

作爲文件名,您可以爲通用圖像格式(如jpg,jpeg,png,bmp等)提供通配符。

如果您想要額外的速度,可以在不同的線程上運行函數,然後同步結果。

編輯:

對於獨立於平臺的解決方案,您可以使用boost::filesystem類或與boost::filesystem

​​

遞歸搜索文件爲了更好地implenetation Qt的QDir

示例代碼中,我強烈地爲您提供閱讀boost::filesystem文件

對於QDir

filesStack = new QStack<QString>(); 

QDir selectedDir("C:\\"); 
selectedDir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDot | QDir::NoDotDot); 
QStringList qsl; qsl.append("*.bmp"); 
selectedDir.setNameFilters(qsl); 
findFilesRecursively(selectedDir); 


void findFilesRecursively(QDir rootDir) 
{ 
    QDirIterator it(rootDir, QDirIterator::Subdirectories); 
    while(it.hasNext()) 
    { 
     filesStack->push(it.next()); 
    } 
} 
2

對於python,簡單地使用內置的功能從os模塊將是一個適當的跨平臺解決方案。對於C++,我建議使用boost filesystem,這將是迄今爲止最痛苦的解決方案。

至於速度,好吧,它可能無所謂。這些功能將完全受I/O限制。理論上,你可以對此進行編程,但是如果它位於同一個驅動器上,它仍然會受到I/O限制。如果它位於不同的驅動器上,它可能會提高一些速度,雖然像往常一樣,在優化之前進行配置。