Forum Programmation.c parcours d'une arborescence de fichier

Posté par  .
Étiquettes : aucune
0
13
juil.
2005
Hello,

j'écris un programme pour linux en c++/gtkmm-2.4,
je voulais une fenetre un peu dans le style k3b ou gnomebaker pour afficher une arborescence de fichiers.

boost::filesystem ne marche pas sur mon pc alors j'ai trouvé des fonctions C telles que opendir() readdir() etc...

j'ai écris une fonction récursive pour lire le contenu du disk et ajouter les répertoires sur un Gtk::TreeStore...

ça marche bien si je prends le rép utilisateur comme racine de l'arborescence.

pour des réps tels que /dev /proc et /sys c la mouize, la fonction récursive boucle ces réps doivent contenir des raccourcis qui renvoient à chais pas quoi ...

si vous avez une idée pour que le prog puisse identifier le type de "fichier" (j'ai essayé stat() mais il me dit qu'un raccourci vers un rép est un rép donc ça m'avance pas trop lol)


merci d'avance pour toute réponse (et pour avoir lu ce post ;) )
  • # lstat

    Posté par  . Évalué à 2.

    extrait du man (qu'en anglais sous la main ...)
    lstat is identical to stat, except in the case of a symbolic link,
    where the link itself is stat-ed, not the file that it refers to.
    • [^] # Re: lstat

      Posté par  . Évalué à 1.

      yep je te remercie pour l'info, j'ai tenté le code suivant :

      #include <sys/stat.h>
      #include <unistd.h>
      #include
      using namespace std;

      int main()
      {
      struct stat info;
      lstat("/home/fieska/b.run", &info);
      int i = S_ISLNK(info.st_mode);
      cout << i << endl;
      return 0;
      }

      quelque soit le type de fichier que je passe en paramaètre dans lstat
      (fichier normal, lien symbolique ou rép), la variable i à toujours la même valeur, à savoir 0 ...
      • [^] # Re: lstat

        Posté par  . Évalué à 1.

        c bon, vu que je n'ai pas trouvé bcp de doc j'ai été explorer le code source de gnomebaker pour me rendre compte que leur code et le mien sont pas mal équivalents pour construire l'arborescence (je suis content lol) et du coup j'ai trouvé comment rédiger la commande :

        ce qui donne :

        /* Created by Anjuta version 1.2.3 */
        /* This file will not be overwritten */
        #include <sys/stat.h>
        #include <unistd.h>
        #include
        using namespace std;
        int main()
        {
        struct stat info;
        lstat("/home/fieska/a", &info);
        if (info.st_mode & S_IFLNK)
        cout << "Lien" << endl;
        return 0;
        }

        merci encore :)
      • [^] # Re: lstat

        Posté par  . Évalué à 2.

        bizarre ça. Je viens de faire quelques tests chez moi. Ca marche nickel.
        à moins que tu sois en POSIX.1-1996 (vu que le man dit que ça existe pas dans cette norme là), ça devrait marcher aussi chez toi ...

        Le truc qui me plait pas trop dans ton prog de test, c'est le nom du fichier en dur.

        Il suffit d'ajouter (int argc, char** argv) en paramètre de ton main et un argv[1] à la place du nom du fichier pour faire pleins de tests en étant sûr de pas s'emmeler les pinceaux dans la création de fichiers. Attention, argv[1], pas argv[0]. Je viens betement de perdre un quart d'heure là dessus :p
        • [^] # Re: lstat

          Posté par  . Évalué à 1.

          bizarre oui, tout à l'heure j'ai fais des tests et j'ai cru que ça marchait,
          là ça marche pas, le code que j'ai envoyé renvoie systématiquement que c un lien ...
          j'ai fais comme tu m'as dit pour passer le nom du fichier en argument.
          par contre je ne sais pas où vérifier pour la norme posix, je suis sous debian testing.

          merci pour tes conseils ;)
          • [^] # Re: lstat

            Posté par  . Évalué à 1.

            en fait je dois être dans la mauvaise norme ...

            S_IFDIR et S_IFREG fonctionnent mais pas le S_IFLNK

            qd je teste un lien pour savoir s'il est fichier ou rép il me répond soit fichier soit les deux ... lol

            bref je ne sais pas trop comment détecter les liens symboliques du coup ...

            encore merci
            • [^] # Re: lstat

              Posté par  . Évalué à 1.

              j'ai trouvé :)))

              tout rentre dans l'ordre héhé merci encore pour tout :))) ça fonctionne nikel :))
              • [^] # Re: lstat

                Posté par  . Évalué à 2.

                cool =)
                fais profiter ! fais profiter !
                Il se passait quoi ? :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.