Есть ли кроссплатформенная библиотека C / C ++ для поиска файлов? (на жестком диске) - PullRequest
3 голосов
/ 08 июня 2010

Существует ли кроссплатформенная библиотека C \ C ++ для поиска файлов? (на жестком диске) Что мне нужно, так это просто - иметь возможность найти все изображения на компьютере пользователя во всех папках и подпапках с размером sise> = 200 КБ

Как это сделать? Может кто-нибудь мне помочь? Пожалуйста.

Ответы [ 2 ]

6 голосов
/ 08 июня 2010

Boost.Filesystem - отличная библиотека.Вот код, который я написал некоторое время назад, вы можете легко изменить критерии поиска, узнав библиотеку (вы можете запросить размер и расширение):

#include <iostream>
#include <string>
#include <vector>
#include <boost/filesystem.hpp>

using namespace std;
using namespace boost::filesystem;

void find_file(const path& root, const string& file_name, vector<path>& found_files)
{
        directory_iterator current_file(root), end_file;
        bool found_file_in_dir = false;
        for( ; current_file != end_file; ++current_file)
        {
                if( is_directory(current_file->status()) )
                        find_file(*current_file, file_name, found_files);
                if( !found_file_in_dir && current_file->leaf() == file_name )
                {
                        // Now we have found a file with the specified name,
                        // which means that there are no more files with the same
                        // name in the __same__ directory. What we have to do next,
                        // is to look for sub directories only, without checking other files.
                        found_files.push_back(*current_file);
                        found_file_in_dir = true;
                }
        }
}

int main()
{
        string file_name;
        string root_path;
        vector<path> found_files;

        std::cout << root_path;
        cout << "Please enter the name of the file to be found(with extension): ";
        cin >> file_name;
        cout << "Please enter the starting path of the search: ";
        cin >> root_path;
        cout << endl;

        find_file(root_path, file_name, found_files);
        for( std::size_t i = 0; i < found_files.size(); ++i)
                cout << found_files[i] << endl;
}
1 голос
/ 08 июня 2010

ACE имеет много кроссплатформенных оболочек.В вашем конкретном случае смотрите ACE_Dirent или ACE_OS :: scandir / ACE_OS :: opendir / ACE_OS :: readdir и функции друзейACE - очень мощный уровень абстракции между операционными системами.Если вам нужны такие вещи, то это путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...