搜索客户计算机(和其他安装的驱动器)的最快方法是什么?我的客户将安装一个使用 Python 编写的桌面应用程序,但如果速度更快,我可以添加 C++ 代码......
问问题
370 次
2 回答
3
如果您的平台是 Win32,使用 C++,您可以简单地使用 Winapi 函数
进而
作为文件名,您可以为已知图像格式提供通配符,例如 jpg、jpeg、png、bmp 等。
如果你想要额外的速度,你可以在不同的线程上运行函数,然后同步结果。
编辑:
对于独立于平台的解决方案,您可以使用boost::filesystem类或 Qt 的 QDir
使用boost::filesystem递归搜索文件的示例代码
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());
}
}
于 2013-04-05T05:57:13.887 回答
2
因为python
,简单地使用os
模块中的内置功能将是一个足够的跨平台解决方案。对于C++
,我建议使用boost filesystem,这将是迄今为止最不痛苦的解决方案。
至于速度,好吧,这可能无关紧要。此类函数将完全受 I/O 限制。理论上你可以线程化它,但如果它在同一个驱动器上,它仍然是 I/O 绑定的。如果它在单独的驱动器上,它可能会给你一些加速,但像往常一样,在优化之前进行配置。
于 2013-04-05T06:17:32.643 回答