поиск на компьютере клиента определенных файлов

Какой самый быстрый способ поиска клиентского компьютера (и других подключенных дисков), скажем, по изображениям. На моих клиентах будет установлено настольное приложение, которое находится на Python, но я могу добавить код C ++, если это будет быстрее …

3

Решение

Если ваша платформа Win32, с C ++ вы можете просто использовать функции Winapi

FindFirstFile

FindFirstFileEx

а потом

FindNextFile

в качестве имени файла вы можете указать шаблоны для известных форматов изображений, таких как jpg, jpeg, png, bmp и т. д.

Если вам нужна дополнительная скорость, вы можете запускать функции в разных потоках, а затем синхронизировать результаты.

Редактировать:

Для независимого от платформы решения вы можете использовать повышение :: файловая система класс или Qt’s 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() );
}

Для лучшей реализации я настоятельно рекомендую вам прочитать повышение :: файловая система документация

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

Другие решения

За pythonпросто используя встроенную функциональность из os Модуль станет адекватным кроссплатформенным решением. За C++Я бы предложил использовать повысить файловую систему, что будет безусловно наименее болезненным решением.

Что касается скорости, то, вероятно, это не будет иметь значения. Такие функции будут полностью связаны с вводом / выводом. Вы можете теоретически продвинуть это, но если он находится на том же диске, он все равно будет связан с вводом / выводом. Если он находится на отдельных дисках, это может дать вам некоторое ускорение, хотя, как обычно, профиль перед оптимизацией.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector