Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème ficher .txt en C

    26 avril 2023 à 13:31:45

    Bonjour à tous j'aimerais avoir votre aide par rapport à un petit code que j'ai fait mais que ne fonctionne pas correctement

    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #ifndef Win32
           #include <sys/types.h>
    #endif
    int verif_ps(const unsigned char ver[25])
    {   
        int res = 2;
        int curseur = SEEK_SET;
        unsigned  char ver2[25];
    
        FILE* fic = NULL;
        struct dirent* fichier;
        DIR* direct = NULL;
        direct = opendir("C:\\Users\\User\\Documents\\fun\\src");
        if (direct == NULL)
        {
            printf("erreur au niveau de l'ouverture du dossier.");
            exit(1);
        }
        fic = fopen("test.txt","r+");
        if (fic == NULL)
        {
            printf("impossible d'ouvrir le fichier");
            exit(1);
        }
        while (curseur != SEEK_END)
        {
             fgets(ver2,sizeof(ver2),fic);
       
            if (*ver == *ver2) {
            res=1;
            }
            else {
            res=0;
            }
            curseur = SEEK_CUR;
        
        if (res == 1)
        {
            break;
        }
        }
        printf("%d",&res);
        fclose(fic);
        closedir(direct);
    return res;
    }

    (mon programme dispose d'une fonction main se trouvant dans un autre fichier) le soucis c'est qu'après compilation et exécution du programme je tombe sur "impossible d'ouvrir le fichier"


    • Partager sur Facebook
    • Partager sur Twitter
      26 avril 2023 à 14:04:31

      Avec le mode d'ouverture "r" le fichier doit exister. Est-ce le cas ?

      Et comme tu n'indique pas le chemin absolu, il doit être dans le répertoire courant. Est-ce le cas ?

      PS : Peux tu expliquer ce que doit faire ta fonction ? (il y a beaucoup de code qui ne sert à rien, et la boucle va tourner sans fin).

      -
      Edité par rouIoude 26 avril 2023 à 14:07:34

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        26 avril 2023 à 16:04:51

        Le fichier existe dans un sous dossier que j'ai ouvert avec opendir a la ligne 16en gros cette fonction va prendre la chaîne de caractères qu'elle reçoit en paramètre et vérifie si cette chaîne existe dans le fichier
        • Partager sur Facebook
        • Partager sur Twitter
          26 avril 2023 à 17:29:14

          rouIoude a écrit:

          Et comme tu n'indique pas le chemin absolu, il doit être dans le répertoire courant. Est-ce le cas ?

          Tu codes un peut au pif ? Ce n'est pas opendir qui va changer le répertoire courant !

          Ce que tu peux faire c'est mettre le chemin complet pour ouvrir ton fichier.

          PS : Une fois ouvert tu vas avoir d'autre surprises. (On dirait que tu prends des fonctions un peu au hasard en se disant que ça va peut-être marcher).



          • Partager sur Facebook
          • Partager sur Twitter
          ...
            26 avril 2023 à 20:34:01

            je comprends mon erreur,mais que voulez vous dire par surprise ?
            • Partager sur Facebook
            • Partager sur Twitter
              26 avril 2023 à 23:25:26

              paullb a écrit:

              je comprends mon erreur,mais que voulez vous dire par surprise ?

              Corrige ton erreur et tu verras.



              • Partager sur Facebook
              • Partager sur Twitter
              ...
                26 avril 2023 à 23:32:19

                paullb a écrit:

                je comprends mon erreur,mais que voulez vous dire par surprise ?


                Et bien, résous ton problème d'ouverture (*), et exécute ensuite ton programme (contrairement à ce que pense @rouloude, je crois qu'il y a une possibilté pour que ta boucle while ne tourne pas sans fin). Mais en ce qui concerne le résultat....

                (*) cette partie ne devrait même pas se trouver dans cette fonction-là.

                • Partager sur Facebook
                • Partager sur Twitter

                On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                  26 avril 2023 à 23:42:48

                  Elle peut effectivement sortir par le break.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  ...
                    27 avril 2023 à 15:13:32

                    Grâce à vous j'ai pu résoudre les différents problèmes un grand merci pour votre aide
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 avril 2023 à 22:14:16

                      paullb a écrit:

                      Grâce à vous j'ai pu résoudre les différents problèmes un grand merci pour votre aide

                      Bonjour,

                      Sujet résolu

                      Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 mai 2023 à 16:01:29

                        > Le fichier existe dans un sous dossier que j'ai ouvert avec opendir a la ligne 16

                        Pas vraiment.

                        L'appel à opendir ne "place" pas dans le répertoire pour les ouvertures de fichiers (open/fopen) qui suivent.

                        Ca permet de passer en revue les différents éléments ("entries") qui existent dans un répertoire.

                        Code :

                        #include <stdio.h>
                        #include <stdlib.h>
                        #include <stdbool.h>
                        #include <sys/types.h>
                        #include <dirent.h>
                        
                        int main()
                        {
                            printf("Contenu de /var :\n");
                            DIR *dir = opendir("/var");
                            while (true) {
                                struct dirent *entry = readdir(dir);
                                if (entry == NULL) break;
                        
                                printf("-> %s\n", entry->d_name);
                            }
                            return EXIT_SUCCESS;
                        }
                        

                        Compilation et exécution

                        $ cc -std=c17 -Wall -Wextra -pedantic -Werror -Wno-unused \
                        -D_XOPEN_SOURCE=700 -g    prog.c   -o prog
                        $ ./prog
                        Contenu de /var :
                        -> .
                        -> run
                        -> tmp
                        -> cache
                        -> backups
                        -> opt
                        -> spool
                        -> lock
                        -> log
                        -> lib
                        -> mail
                        -> ..
                        -> local
                        -> snap



                        ---

                        Quant à

                        if (*ver1 == *ver2) 
                        

                        ça compare le caractère pointé par ver1 et celui pointé par ver2.

                        Un de chaque.



                        -
                        Edité par michelbillaud 4 mai 2023 à 17:35:29

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème ficher .txt en C

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown