2013-04-05 37 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限制。如果它位于不同的驱动器上,它可能会提高一些速度,虽然像往常一样,在优化之前进行配置。