Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ouvrir un fichier depuis un autre dossier

Sujet résolu
    14 juin 2019 à 11:04:24

    Salut je suis en train de réaliser un programme me permettant d'ouvrir un répertoire depuis un autre puis par la suite si l'utilisateur le veut bien . Mais le problème c'est que ça ne marche pas voici le code.

    /* Les en-tête nécessaire */
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    
    /* déclaration des variables */
    char nomdossier[20] = {0};
    char emplacement[256] = {0};
    char nomfichier[256] = {0};
    char ligne [ 256 ];
    int i=1; int r1; /* fonction main */ int main (int argc, char*argv) { DIR*pointer = NULL; struct dirent*box; /* Choix du dossier a ouvrir */ printf("Quel est le nom du dossier que vous voulez lister:\n"); scanf("%s", nomdossier); printf("\nVeuillez entrer le nom de l'emplacement de %s:\n",nomdossier); scanf("%s", emplacement); pointer = opendir(emplacement); if(pointer == NULL) { printf(stderr , "L'emplacement ou le dossier choisi n'existe pas\n"); exit(1); } box = readdir(pointer); printf("\nVoici la liste des fichiers du dossier %s:\n",nomdossier); while(box != NULL) { printf("Fichier %i=%s\n\n", i,box->d_name); box = readdir(pointer); i=i+1; } printf("Voulez vous ouvrir l'un d'un fichier ? 0 pour juste ouvrir, 1 pour ne rien faire\n"); scanf("%d",&r1); if (r1 ==0) { printf("Entez le nom de votre fichier:\n"); scanf("%s", nomfichier); FILE *fichier = fopen ( nomfichier, "r" ); if ( fichier != NULL ) { /* Lecture de la ligne */ while ( fgets ( ligne, sizeof ligne, fichier ) != NULL ) { /* Ecriture de la ligne */ printf("%s", ligne); } fclose ( fichier ); } /* Le fichier ne s'ouvre pas */ else { perror ( nomfichier ); } return 0; } }

    Mais le problème c'est que je ne peux faire quelque chose comme ça

    if (r1 ==0)
    	{
    		printf("Entez le nom de votre fichier:\n");
    		scanf("emplacement/%s", nomfichier);
    	   
    		FILE *fichier = fopen ( emplacement/nomfichier, "r" );
    		if ( fichier != NULL )
    		{	   
    		/* Lecture de la ligne */
    		while ( fgets ( ligne, sizeof ligne, fichier ) != NULL ) 
    		{
    			/* Ecriture de la ligne */
    			printf("%s", ligne); 
    		}
    		fclose ( fichier );
    		}
    	   
    		/* Le fichier ne s'ouvre pas */
    		else
    		{
    			perror ( emplacement/nomfichier ); 
    		}
    		return 0;
    	}

    Merci de votre aide ^^


    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2019 à 12:06:55

      ZerZer15 a écrit:

      Mais le problème c'est que ça ne marche pas voici le code.

      Ça marche pas ?!?   :  Qu'est ce qui marche pas ?

      J'ai testé, ça liste bien le répertoire entré dans la chaîne emplacement.

       nomdossier, il sert à quoi ?

      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2019 à 13:45:11

        Nan je me suis mal exprimer en fait le premier programme marche mais dès que je veux mettre emplacement/nomfichier pour ouvrir le fichier ca ne marche pas, même quadn je passe par une autre variable  :/

        rouloude a écrit:

         nomdossier, il sert à quoi ?

        Strictement a rien ^^



        -
        Edité par ZerZer15 14 juin 2019 à 13:48:13

        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2019 à 13:57:22

          ZerZer15 a écrit:

          mais dès que je veux mettre emplacement/nomfichier pour ouvrir le fichier ca ne marche pas. :

          Ça ne marche pas ? C'est clair comme description !

          Je n'avais pas regardé le second code, effectivement c'est pas bon du tout !

          1) il faut revoir l'utilisation de scanf ligne 4 !

          2) fopen aussi ligne 6 !

          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2019 à 14:15:10

            Oui, mais justement, je ne sais pas comment faire parce que je veux faire ce que j'ai écrit, mais les fonctions ne me le permettent pas et j'ai vu que je ne savais pas trop comment le dire :/

            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2019 à 14:24:10

              Si tu sais utiliser scanf, tu récupères le nom du fichier, pas plus. sinon revoir le cours.

              Ensuite tu fais une concaténation avec emplacement pour constituer le chemin complet du fichier. (sprintf, strcat...)

              Ensuite tu ouvres ton fichier avec fopen, à savoir que fopen pend en son premier paramètre une chaîne de caractère.

              La suite devrait marcher, à condition que les saisies soit correctes.

              PS : Évites les variables globales à gogo !

              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2019 à 14:52:50

                Euh le problème c'est que je ne sais pas utiliser sprintf et strcat par ce que je suis en train d'apprendre le c avec le site. XD
                • Partager sur Facebook
                • Partager sur Twitter
                  14 juin 2019 à 15:03:49

                  ZerZer15 a écrit:

                  Euh le problème c'est que je ne sais pas utiliser sprintf et strcat par ce que je suis en train d'apprendre le c avec le site. XD

                  Le site t'apprend le langage, mais ne va pas t'apprendre toutes les fonctions de toutes la librairie standard. ça, c'est à toi d'apprendre ça par toi même.

                  En l'occurence tu peux regarder la documentation qui explique ça très bien

                  https://www.tutorialspoint.com/c_standard_library/c_function_sprintf.htm

                  sprintf est comme printf, mais au lieu d'afficher à la sortie standard, ça te met le résultat dans le premier argument.

                  https://www.tutorialspoint.com/c_standard_library/c_function_strcat.htm

                  strcat fait une concaténation de chaines de caractères.

                  Par ailleurs, tu dis que tu apprends par le site.. Mais y a pas un moment où on vous fait faire un TP où vous devez recoder les fonctions string de la librairie standard, genre strcpy strcat etc.. ?

                  EDIT : ce chapitre là en parle de strcat et compagnie : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/15765-les-chaines-de-caracteres

                  Contrairement à mes souvenirs il n'y a pas d'exercice dessus (d'ailleurs ils sont passés où tous les exos qu'il y avait avant dans le cours ? :o)

                  -
                  Edité par potterman28wxcv 14 juin 2019 à 15:06:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 juin 2019 à 15:04:41

                    Ah, là, trois solutions : soit tu apprends à les utiliser, soit tu saisies le chemin complet du fichier, soit tu crées ta propre fonction de concaténation.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juin 2019 à 9:49:49

                      Merci de votre aide. Du coup j'ai regardé la fonction strcat pour pouvoir concaténer.

                      -
                      Edité par ZerZer15 19 juin 2019 à 10:06:53

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Ouvrir un fichier depuis un autre dossier

                      × 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