2009-04-08 9 views

Répondre

6

La norme C++ ne spécifie pas toutes les fonctions d'annuaire, de sorte que vous devrez utiliser quelque chose mise en œuvre spécifique. Par exemple, sous Windows, vous pouvez utiliser la fonction chdir(). déclaré en <direct.h>.

BTW, s'il vous plaît noter que c'est une bonne idée d'indiquer quel (s) système (s) d'exploitation vous intéresse lorsque vous postez des questions comme celle-ci.

1

Vous ne voulez pas changer dir, mais il suffit de les ouvrir à lire leurs entrées (voir opendir())

En général, je trouve plus facile de gérer le chemin complet que de compter sur le répertoire courant du processus.

9

Si vous voulez un moyen propre et portable d'accéder aux fichiers et aux répertoires, ne cherchez pas plus loin que Boost.Filesystem. Vous devriez parcourir la documentation pour trouver exactement ce dont vous avez besoin. Voici une suggestion sur la façon dont vous pourriez utiliser le cadre pour faire avancer les choses.

#include <iostream> 
#include <filesystem> 

using std::tr2::sys; 
using std::cout; 

void do_something_with_file(std::string const& p) 
{ 
    std::cout << "Found file : " << p << std::end; 
} 

void explore_directory(std::string const& p) 
{ 
    for (directory_iterator itr(p); itr!=directory_iterator(); ++itr) 
    { 
     if(is_directory(itr->status())) 
     { 
     explore_directory(itr->path().filename()); 
     } 
     else if(is_regular_file(itr->status())) 
     { 
     do_something_with_file(itr->path().filename()); 
     } 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    std::string p(argc <= 1 ? "." : argv[1]); 

    if (is_directory(p)) 
    { 
    explore_directory(p); 
    } 
    else cout << (exists(p) : "Found: " : "Not found: ") << p << '\n'; 

    return 0; 
} 
+0

Je suis étonné qu'aucun des 4 messages précédents n'a recommandé le boost. –

+0

cela donne une chance d'apprendre à le faire avec les appels système natifs –

+0

Vous pouvez toujours, mais c'est, à mon avis, pas le moyen le plus efficace (comme le temps de coder) pour le faire. –

Questions connexes