begin process at 2012 05 29 07:42:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Fichier & Disque

 > 

Lister automatiquement les fichiers d'un repertoire : problème de portabilité?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lister automatiquement les fichiers d'un repertoire : problème de portabilité?

mercredi 30 juin 2010 à 12:06:43 | Lister automatiquement les fichiers d'un repertoire : problème de portabilité?

hakimus

Bonjour à tous,

Je cherche à récupérer la liste de tous les fichiers présents dans un répertoire, en C++. De ce que j'ai lû jusqu'à présent, le code diffère selon l'environnement :

Code C/C++ :
// WIN32
#include <stdio.h>
#include <windows.h>

int main(void)
{
    WIN32_FIND_DATA File;
    HANDLE hSearch;
    
    hSearch = FindFirstFile("*.*", &File);
    if (hSearch != INVALID_HANDLE_VALUE)
    {
        do {
            printf("%s\n", File.cFileName);
        } while (FindNextFile(hSearch, &File));
        
        FindClose(hSearch);
    }
    
    return 0;
}


Code C/C++ :
//POSIX
#include <stdio.h>
#include <dirent.h>
 
int main(void)
{
    DIR * rep = opendir(".");
    
    if (rep != NULL)
    {
        struct dirent * ent;
        
        while ((ent = readdir(rep)) != NULL)
        {
            printf("%s\n", ent->d_name);
        }
        
        closedir(rep);
    }
     
    return 0;
}


J'aimerais donc savoir comment faire pour intégrer ces deux portions de code à mon application et faire en sorte de détecter l'environnement pour exécuter le bon code? J'ai pensé à des macros, mais je n'en ai encore jamais utilisé, donc si quelqu'un a un exemple sur la façon de faire?...

Ou, encore mieux, un code portable qui m'évite d'avoir à détecter l'environnement?

Merci d'avance!
mercredi 30 juin 2010 à 14:08:37 | Re : Lister automatiquement les fichiers d'un repertoire : problème de portabilité?

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Utilise boost, c'est portable :)
Ce que tu cherches à faire est dans boost::filesystem

Exemple (qui permet au choix de lister les fichiers avec ou sans se soucier des sous dossiers):
Code C/C++ :
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
#include <iostream>
#include <iomanip>

namespace fs = boost::filesystem;

void displaySpace(int nb)
{
  for (int i = 0; i < nb; ++i)
    std::cout << ' ';
}

void listDirectory(const fs::path& path,
		   bool recursive,
		   int depth = 0)
{
  if (!fs::exists(path))
    return;

  fs::directory_iterator end;
  for (fs::directory_iterator it(path); it != end; ++it)
  {
    displaySpace(depth);
    if (fs::is_directory(it->status()))
    {
      if (recursive)
	listDirectory(it->path(), recursive, depth + 2);
      std::cout << it->path().filename() << "/" << std::endl;
    }
    else if (fs::is_regular_file(it->status()))
      std::cout << it->path().filename() << std::endl;
    else
      std::cout << it->path().filename() << " [other]" << std::endl;
  }
}

int main()
{
  listDirectory(".", false);
  listDirectory(".", true);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
jeudi 1 juillet 2010 à 10:28:54 | Re : Lister automatiquement les fichiers d'un repertoire : problème de portabilité?

hakimus


Testé et approuvé!

Merci beaucoup


Cette discussion est classée dans : code, file, include, rep, hsearch


Répondre à ce message

Sujets en rapport avec ce message

Petit probleme de code en C sur Linux !! [ par UncleShu ] Je voudrais créer un fichier dans le réperoire personnel d'un utilisateur mais mon code ne marche pas !!#include #include #include #define DIR $HOM Problème de lecture [ par Hades53 ] Voila, j'ai fait un code pour lire des fichiers qui marche, mais il y a un petit problème avec la dernière ligne du fichier qu'on veut lire:si la dern Erreurs de compilations bizarres avec Visual C++ 6 [ par VTS_35 ] Bonjour,G encore des problèmes de compilation avec mon programme. Je me suis rendu compte que le programme allait devenir balaise, alors j'ai décidé d Lister un répertoire [ par norton ] Bonjour à tous, Voila ca fait un petit moment que je me prend la tête avec ce code [code=cpp] WIN32_FIND_DATA File; HANDLE hSearch; BOOL re; hSea Fichier ressource .rc et fonts [ par bunob ] Bonjour, J'essaie d'appliquer une police particulière sur un contrôle : [code=cpp] #include #include "resource.h" #include "winres.h" .... FONT 18, erreur code [ par ucf662 ] [code=cpp]class point{ int x,y; public: void initialiser( int x1 , int y1 ) ; void deplacer( i code qui donne le temps d'exécution sous linux [ par elhajjajireda ] Bonjour, si le vous plait est ce que vous pouvez m'aider un peu pour comprendre ce code qui permet d'obtenir le temps d'exécution sous linux [code=cp C dup utilisation [ par Tom59247 ] Bonjour à tous ! Je réalise actuellement un petit programme qui me permet de mettre quelques infos dans un fichier txt. Après quelques recherches j' ça compile sur dev et ça marche pas sur codeblocks [ par m2z ] comme le titre l'indique voici le code source ça marche sans aucun probleme sue DEV et ça donne le message undefined reference to 'sleep' voici le cod Linker/inclure la SDL dans QT [ par victorjung ] BOnjour, a tous voila un moment que j essaye d'utiliser la sdl dans qt, je crois que je n'ai jamais etais aussi pres, j'ai juste le probleme suivant,


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales