Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèque standard C Discussion :

tri par ordre alphabétique des noms de fichier contenu dans un dossier


Sujet :

Bibliothèque standard C

  1. #1
    Futur Membre du Club
    tri par ordre alphabétique des noms de fichier contenu dans un dossier
    bonjour,

    Actuellement, j'utilise les fonctions de la librairie dirent pour récupérer les nom des fichiers contenus dans un dossier.
    Cependant la librairie me livre les noms de fichiers dans l'ordre chronologique et pour ma part j'aimerai les avoir par ordre alphabétique.
    ma contrainte serait de le pas être obligé de les recopier dans une variable (je peux avoir beaucoup de fichier et ça prendrait beaucoup trop de place en mémoire de tous les retenir) et j'aimerai tant que possible éviter de faire des appels système.

    connaissez-vous une solution à mon problème ?
    (une option dans la librairie dirent ?, une autre manière de faire ?)

    merci d'avance.

  2. #2
    Expert éminent sénior
    la fonction qsort, en mettant dans la fonction de comparasion le signe de strcmp..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Futur Membre du Club
    perdu.
    Les fonctions de dirent me fournissent pas un tableau de char* contenant les nom des fichiers nécessaire au qsort.
    les fonctions de dirent (readdir) me fournissent les nom des fichiers un par un à la même adresse

    et comme dis plus haut
    ma contrainte serait de le pas être obligé de recopier les noms de fichier dans une variable
    une (autre) solution ?

  4. #4
    Membre expérimenté
    je peux avoir beaucoup de fichier et ça prendrait beaucoup trop de place en mémoire de tous les retenir
    A moins d'avoir un PC préhistorique, stocker des noms de fichier en mémoire n'est qu'une goutte d'eau. Exemple : stocker en mémoire 1000 noms de fichiers de 100 caractères chacun n'occupe que ~100ko, c'est-à-dire rien du tout.

    A mon avis, tu ne peux pas échapper au stockage en mémoire, sinon je ne vois pas comment faire.

    Après, pour le tri, il y a la méthode des tableaux ou des listes chainées.

  5. #5
    Expert confirmé
    Lai,
    Citation Envoyé par ulnar Voir le message
    perdu.
    Les fonctions de dirent me fournissent pas un tableau de char* contenant les nom des fichiers nécessaire au qsort.
    les fonctions de dirent (readdir) me fournissent les nom des fichiers un par un à la même adresse

    et comme dis plus haut


    une (autre) solution ?
    Oui : t'en passer.

    Il faudra bien qu'à un moment ou un autre tu utilises des variables (sinon, où vas-tu mettre le résultat de ce tri ?)
    Le mysticisme est une maladie qui crée des problèmes là où il n’en existe pas.

  6. #6
    Membre émérite
    Citation Envoyé par ulnar Voir le message
    perdu.
    Les fonctions de dirent me fournissent pas un tableau de char* contenant les nom des fichiers nécessaire au qsort.
    les fonctions de dirent (readdir) me fournissent les nom des fichiers un par un à la même adresse
    En réfléchissant deux secondes tu te rends bien compte qu'il va falloir que tu enregistre les infos à trier dans un tableau pour les trier, quelle que soit las méthode.

    A chaque appel à dirent tu enregistres les infos que tu veux garder, par exemple dans une liste chainée. Puis tu alloues un tableau de pointeurs vers ces données. Et tu utilises qsort() pour trier ce tableau de pointeurs.

    Ca m'énerve les personnes qui viennent poser des questions, puis prennent de haut ceux qui se donne la peine de répondre. D'autant plus quand la réponse est bonne.