Lister fichiers et répertoires (multiplateforme)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 921 fois - Téléchargée 19 fois

Contenu du snippet

Exemple de listage des fichiers et répertoires. La méthode fonctionne sur les Linux comme les Windows (en tout cas Vista/Seven car pas testé sur XP et avant, mais Vista/Seven sont compatible POSIX pas XP et avant, donc pas sur que ça fonctionne).

Le fonctionnement est simple, on utilise des fonctions de la norme POSIX, tout système donc compatible peut l'utiliser sans aucun problème.

Source / Exemple :


#include <iostream>
#include <dirent.h>

using namespace std;

int main()
{
    DIR* rep = opendir(".");

    if ( rep != NULL )
    {
        struct dirent* ent;

        while ( (ent = readdir(rep) ) != NULL )
        {
            cout << ent->d_name << endl;
        }

        closedir(rep);
    }

    return 0;
}

Conclusion :


Le code est en C++ (utilisation de cout) mais c'est identique en C. opendir permet d'ouvrir le répertoire, readdir de lire ce dernier et closedir le ferme. Pour le système, un répertoire c'est un dossier tout comme un fichier, pour savoir donc si c'est un dossier et éventuellement listé donc récursivement, il faut alors appeler opendir sur le répertoire dont on viens de récupérer le nom.

Il est certainement possible de faire autrement mais j'ai pas encore cherché de ce coté-ci.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
>> C'est pas parce qu'un truc est du C que le C++ est interdit,

On évite généralement de mélanger C et C++, même si c'est techniquement possible.

>> Imagine un programme don chaque fichier source fait plus de 500 lignes, si il y a aucun using namespace, c'est vide le bordel surtout si tu as 4 ou 5 namespace à utiliser.

Je suis au travail actuellement. J'ai près de 2000 fichiers C++, contenant parfois 3000 lignes. 0 using namespace !
C'est au contraire très bénéfique, et bien plus explicite. Puisque je sais au premier coup d'oeil si une collection est standard ou si c'est une réecriture personnalisé pour un besoin spécifique. De plus, plus un projet grossi plus les conflits potentiels augementent. J'ai eu pour projets d'incorporer une solution avec des using dégueux, au sein de notre solution principale. C'était un cauchemar, puisque le projet à incorporer avait pris la liberté de faire des collections personnalisées au nom de collection du système tout en éclatant les namespaces (via using).
Je ne vais pas réécrire mes raisons, mon post les décrit très bien. Libre à toi d'écouter les conseils des plus expérimentés. Ce n'est pas pour rien que tu trouveras ce genre de pratique déconseillé dans pas mal d'entreprise.
En revanche, ton codes contient une mauvaise pratique facilement évitable, et c'est dommage de montrer ça à un public de débutant.

>> as 4 ou 5 namespace à utiliser.
Alias ? Using simple à portée limité ? Ou simple problème de conception ?
Messages postés
256
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
30 mai 2016
4
C'est pas parce qu'un truc est du C que le C++ est interdit, première chose. Ensuite, les using namspace comme dit ton lien sont souvent mal utilisé, cela veut pas dire qu'il faut pas les utiliser bien au contraire. C'est pas toi qui va m'apprendre à utiliser cela. Imagine un programme don chaque fichier source fait plus de 500 lignes, si il y a aucun using namespace, c'est vide le bordel surtout si tu as 4 ou 5 namespace à utiliser.

En l'occurence ici, aucun risque d'un conflit car un seul et unique d'utiliser, donc je ne vois pas le problème.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
Si c'est du C, écris le en C. Donc iostream => stdio.h, std::cout => printf.
Si c'est du C++, alors: Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
Messages postés
12
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2011

bonjour,

pourrait-on avoir une version exécutable sous windows XP ou W7 ?
j'ai des gros problèmes de listes de répertoires avec VBA pour Excel à cause des permissions de fichiers que je ne sais pas intercepter et qui me plantent !
merci
Messages postés
256
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
30 mai 2016
4
Salut,

Le but ici été d'avoir quelque chose de portable sans devoir disposer d'une librairie supplémentaire. Cela dit, oui je sais pour Boost, j'en ai souvent entendu parlé. Il réglerait le problème pour les systèmes non conforme POSIX, cela dit les ordinateurs sous 98 sont de plus en plus rare, quant à XP je suis pas sur qu'il soit conforme POSIX par défaut mais j'avais entendu parlé du Windows PowerShell, programme officiel qui augmente les possibilités de la console et rend le système POSIX et d'après ce que j'ai entendu, l'utilisation de PowerShell est de plus en plus courant sous XP, donc à ce niveau là pas de soucis.

Mais oui Boost est un bon moyen d'avoir du parfaitement portable en effet ;)
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.