搜索客户端计算机(和其他已安装的驱动器)的最快方式是图像。我的客户将安装一个使用Python的桌面应用程序,但如果更快,我可以添加C ++代码......
答案 0 :(得分:3)
如果您的平台是Win32,使用C ++,您只需使用Winapi功能
然后
作为文件名,您可以为已知的图像格式(如jpg,jpeg,png,bmp等)提供通配符。
如果你想要额外的速度,你可以在不同的线程上运行函数,然后同步结果。
编辑:
对于平台无关的解决方案,您可以使用boost::filesystem课程或Qt的QDir
递归搜索文件的示例代码std::string target_path( "C:\\" );
boost::regex my_filter( "*\.bmp" );
std::vector< std::string > all_matching_files;
for ( boost::filesystem::recursive_directory_iterator end, dir(target_path);
dir != end; ++dir )
{
// Skip if not a file
if( !boost::filesystem::is_regular_file( i->status() ) )
continue;
boost::smatch what;
// Skip if no match
if( !boost::regex_match( i->leaf(), what, my_filter ) ) continue;
// File matches, store it
all_matching_files.push_back( i->leaf() );
}
为了更好地实施,我强烈建议您阅读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());
}
}
答案 1 :(得分:2)
对于python
,仅使用os
模块中的内置功能将是一个适当的跨平台解决方案。对于C++
,我建议使用boost filesystem,这是迄今为止最不痛苦的解决方案。
至于速度,嗯,这可能无关紧要。这些函数将完全受I / O限制。你理论上可以解决这个问题,但是如果它在同一个驱动器上,它仍然是I / O绑定的。如果它位于不同的驱动器上,它可能会为您提供一些加速,但通常情况下,优化前的配置文件。