62 votes

Puis-je utiliser un masque pour itérer les fichiers dans un répertoire avec un coup de pouce?

Je veux effectuer une itération sur tous les fichiers dans un répertoire correspondant à quelque chose comme "somefiles*.txt". Ne boost::filesystem ont quelque chose de construit pour faire cela, ou dois-je besoin d'une regex ou quelque chose à l'encontre de chacune des feuilles()?

74voto

Julien-L Points 2127

EDIT: Comme indiqué dans les commentaires, le code ci-dessous est valable pour les versions d' boost::filesystem avant la v3. Pour la v3, reportez-vous aux suggestions dans les commentaires.


boost::filesystem n'ont pas de génériques, vous avez pour filtrer les fichiers vous-même.

C'est un exemple de code de l'extraction du contenu d'un répertoire avec un boost::filesystems' directory_iterator et le filtrage par boost::regex:

const std::string target_path( "/my/directory/" );
const boost::regex my_filter( "somefiles.*\.txt" );

std::vector< std::string > all_matching_files;

boost::filesystem::directory_iterator end_itr; // Default ctor yields past-the-end
for( boost::filesystem::directory_iterator i( target_path ); i != end_itr; ++i )
{
    // 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() );
}

(Si vous êtes à la recherche d'un prêt-à-utiliser la classe avec builtin répertoire de filtrage, avoir un regard sur Qt QDir.)

1voto

jon-hanson Points 3912

Je crois que le directory_iterators ne fournira tous les fichiers dans un répertoire. C'est à vous de les filtrer si nécessaire.

0voto

Jonathan Mee Points 658

Comme mentionné à la fin de Julien-L's post - QDir est exactement ce que vous voulez.
https://qt-project.org/doc/qt-5.0/qtcore/qdir.html#QDir-3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X