[langage C++ 2ème R] Afficher contenu d'un dossier ?

Voir le sujet précédent Voir le sujet suivant Aller en bas

[langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  dahico2002 le Mar 23 Déc 2008, 15:03

Bonjour tout le monde,

je voudrais savoir comment est-ce qu'on fait pour afficher le contenue d'un dossier en langage C++ ?
Par exemple : je voudrais afficher tous les noms de fichier et dossier qu'il y a dans le dossier "Program files" en langage C++.

Merci pour votre aide.

Bien à vous et bonne fête à tout le monde

dahico2002

Nombre de messages : 62
Age : 32
Prénom : Malick
Date d'inscription : 13/12/2006

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  pbt le Mar 23 Déc 2008, 15:46

En C, tu pourrais écrire ceci (qui n'est absolument pas portable) .. rappelez-moi comment vous pouvez faire en C++.
Code:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc, char** argv) {
   char* args[5] ;
   char* command = "/bin/ls" ;
   args[0] = command;
   args[1] = "-l" ;
   if ( argc > 1 ) {
      args[2] = argv[1];
      args[3] = NULL;
   } else {
      args[2] = NULL;
   }
   execv("/bin/ls",args);
}

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  Morbid le Mar 23 Déc 2008, 15:51

Ou avec opendir() et readdir() qui sont portable il me semble Wink

Morbid

Nombre de messages : 894
Age : 30
Prénom : Christophe
Statut : Ancien (R)
Date d'inscription : 23/11/2006

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  smb le Mar 23 Déc 2008, 18:52

A mon humble avis, rien n'est portable dans le domaine des répertoires !

Voici un exemple de code récursif sous MinGW (qui utilise des fonctions C) :
Code:

#include <iostream>
#include <io.h>
using namespace std;

/*
    attrib des fichiers
    _A_NORMAL
    _A_RDONLY
    _A_HIDDEN
    _A_SYSTEM
    _A_VOLID
    _A_SUBDIR
    _A_ARCH
*/

void printDir ( char * rep , unsigned align=0 )
{
    _finddata_t sf;
    _chdir(rep);
    long handle = _findfirst("*.*",&sf);
    long rc = handle;
    while ( rc != -1 )
    {
        for ( int i=0; i<align; ++i ) cout<<"  ";
        if ( sf.attrib == _A_SUBDIR && strcmp(sf.name,".") && strcmp(sf.name,"..") )
        {
            cout<<"/"<<sf.name<<endl;
            printDir ( sf.name, align+1 );
        }
        else
            cout<<sf.name<<endl;
        rc = _findnext(handle,&sf);
    }
    _findclose(handle);
    _chdir("..");
}

int main()
{
    printDir ( "." );
    return 0;
}

Ok sous Windows.
A tester sous Linux !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  Dj x-fuse le Mer 24 Déc 2008, 10:38

smb a écrit:
Ok sous Windows.
A tester sous Linux !

Et Mac OS X Wink

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  Legenyes le Mer 24 Déc 2008, 11:45

Dj x-fuse a écrit:
smb a écrit:
Ok sous Windows.
A tester sous Linux !

Et Mac OS X Wink
c'est du Unix donc si ca passe sous linux
ca "devrais" passer sous Mac OS X

Legenyes

Nombre de messages : 626
Age : 31
Prénom : Sébastien
Statut : Ancien : Promo 2008-2009
Localisation : Braine-l'Alleud
Date d'inscription : 16/10/2007

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  nvs le Mer 24 Déc 2008, 18:04

smb a écrit:A mon humble avis, rien n'est portable dans le domaine des répertoires !
c'est également mon avis, pour ce qui concerne la bibliothèque standard.

par contre, comme souvent, boost est là pour nous aider. et plus particulièrement la bibliothèque Filesystem Smile

voici un code source qui fait le travail demandé. il vient de C++ en action -- ah non merde tiens, o'reilly france n'existe plus, comme je suis heureux d'en avoir un exemplaire Wink -- C++ Cookbook :
Code:
#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>

using namespace boost::filesystem;

int main(int argc, char** argv) {

  if (argc < 2) {
      std::cerr << "Usage: " << argv[0] << " [dir name]\n";
      return(EXIT_FAILURE);
  }

  path fullPath =    // Create the full, absolute path name
    system_complete(path(argv[1], native));

  if (!exists(fullPath)) {
      std::cerr << "Error: the directory " << fullPath.string( )
                << " does not exist.\n";
      return(EXIT_FAILURE);
  }

  if (!is_directory(fullPath)) {
      std::cout << fullPath.string( ) << " is not a directory!\n";
      return(EXIT_SUCCESS);
  }

  directory_iterator end;
  for (directory_iterator it(fullPath);
        it != end; ++it) {              // Iterate through each
                                        // element in the dir,
      std::cout << it->leaf( );          // almost as you would
      if (is_directory(*it))            // an STL container
        std::cout << " (dir)";
      std::cout << '\n';
  }

  return(EXIT_SUCCESS);
}
sachant qu'en gros un itérateur est la généralisation objet d'un pointeur, ce code se lit sans soucis. la seule chose un peu perturbante c'est la ligne
Code:
directory_iterator end;
et là, la doc indique que le constructeur par défaut de directoy_iterator crée une sentinelle de fin d'itération.

j'ai testé sous windows (projet c::b avec exécutables disponible ici) : ça marche sans soucis. comptez quand même deux heures pour compiler boost. je testerai plus tard sous linux, mais c'est plus simple car il existe -- du moins sous ubuntu -- des paquets libboost Smile












Dernière édition par nvs le Mer 24 Déc 2008, 21:09, édité 1 fois

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  smb le Mer 24 Déc 2008, 18:53

nvs a écrit:
smb a écrit:A mon humble avis, rien n'est portable dans le domaine des répertoires !
c'est également mon avis, pour ce qui concerne la bibliothèque standard.

par contre, comme souvent, boost est là pour nous aider. et plus particulièrement la bibliothèque Filesystem Smile

ET oui, vivement le nouveau standard C++. En 2009 parait-il ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  nvs le Mer 24 Déc 2008, 21:10

smb a écrit:
nvs a écrit:
smb a écrit:A mon humble avis, rien n'est portable dans le domaine des répertoires !
c'est également mon avis, pour ce qui concerne la bibliothèque standard.

par contre, comme souvent, boost est là pour nous aider. et plus particulièrement la bibliothèque Filesystem Smile

ET oui, vivement le nouveau standard C++. En 2009 parait-il ?
si pas reporté en 2010 Wink








_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  nvs le Jeu 25 Déc 2008, 04:46

nvs a écrit:j'ai testé sous windows (projet c::b avec exécutables disponible ici) : ça marche sans soucis. comptez quand même deux heures pour compiler boost. je testerai plus tard sous linux, mais c'est plus simple car il existe -- du moins sous ubuntu -- des paquets libboost Smile
j'ai rebooté ma bécane sous linux (ubuntu, 64 bits) et ça roule Smile














Dernière édition par nvs le Jeu 25 Déc 2008, 13:05, édité 1 fois

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  yoda le Jeu 25 Déc 2008, 11:41

a noel, nvs aurait-il prie saint Stroustrup ?

yoda

Nombre de messages : 1119
Age : 33
Prénom : Antoine
Statut : Ancien
Localisation : Bruxelles
Date d'inscription : 17/12/2006

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  nvs le Jeu 25 Déc 2008, 13:01

yoda a écrit:a noel, nvs aurait-il prie saint Stroustrup ?
c'est pas faux Razz











_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  nvs le Ven 26 Déc 2008, 01:40

nvs a écrit:comptez quand même deux heures pour compiler boost.
et réservez un petit 40 Gio sur votre disque -- qu'on peut probablement ramener à 20, mais je n'ose pas trop chipoter sans me renseigner d'abord Shocked









_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [langage C++ 2ème R] Afficher contenu d'un dossier ?

Message  Contenu sponsorisé Aujourd'hui à 05:25


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum