IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

 C Discussion :

Probleme avec la fonction fopen


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut Probleme avec la fonction fopen
    slt,
    J'espère que quelqu'un pourra m'aider.
    Voici donc mon problème,j'utilise codeblock et je n'arrive pas à ouvrir des fichiers avec fopen et cie. La compilation ne provoque pas d'erreur. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define TAILLE_MAX 10
     
    int main(int argc, char *argv[])
    {
       FILE* premier=NULL;
       FILE* deuxieme=NULL;
     
       char chaine[TAILLE_MAX] = "";
     
       premier=fopen("test","rb");
       deuxieme=fopen("text1.txt","w");
       if (premier != NULL && deuxieme!= NULL)
       {
          while (fgets(chaine, TAILLE_MAX, premier) != NULL) 
          {
             printf("%s", chaine);// On affiche la chaîne qu'on vient de lire
             fprintf(deuxieme,"%s",chaine);// on copie ds le 2nd fichier le contenu en binaire du 1er
     
          }
          fclose(deuxieme);
          fclose(premier);
       }
       else
       {
          printf("erreur d'ouverture des fichiers");
       }
     
     
       return 0;
    }
    la console m'affiche le message d'erreur("erreur d'ouverture des fichiers") or les fichiers test et tex1 existent bien et je les ai mis dans mon projet avec le main.c
    ce que je veux faire c'est ouvrir test et copier son contenu binaire dans text1!!!

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Probablement que le répertoire d'exécution de ton programme n'est pas le même que celui où se trouve les fichiers. As-tu vérifié ce point ?

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ce programme fonctionne bien chez moi, il est exécuté dans le répertoire qui contient le fichier à copier.

    A noter :
    • system("pause"); n'est pas portable, à éviter donc.
    • system("pause"); est placé après return 0; ne sera donc pas exécuté.
    • le premier fichier est ouvert en mode binaire, le second en mode texte. Il y a incohérence.

    EDIT :
    ce que je veux faire c'est ouvrir test et copier son contenu binaire dans text1!!!
    Dans ce cas, il faut ouvrir les deux fichiers en mode binaire et ne pas utiliser fgets, mais une fonction de lecture par bloc comme fread.
    Dernière modification par Invité(e) ; 22/12/2008 à 13h41.

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut
    Citation Envoyé par mabu Voir le message
    Dans ce cas, il faut ouvrir les deux fichiers en mode binaire et ne pas utiliser fgets, mais une fonction de lecture par bloc comme fread.
    Je ne sais pas comment utiliser fread.est ce que tu pourrais m'expliquer?
    comment je dois l'utiliser dans mon cas?
    merci d'avance.

    Citation Envoyé par 3DArchi Voir le message
    Probablement que le répertoire d'exécution de ton programme n'est pas le même que celui où se trouve les fichiers. As-tu vérifié ce point ?
    Qu'est ce que tu appelles répertoire d'exécution de mon programme ?C'est
    le dossier ou se trouve mon projet cad la ou il y a les dossiers "obj","bin" et "
    Debug"? ou alors c'est dans le dossier bin

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par bigkentheone Voir le message
    g ne sais pas cmt utiliser fread.est ce que tu pourrais m'expliquer?
    cmt g dois l'utiliser ds mon cas?
    merci d'avance.


    Réponse dans la FAQ : http://c.developpez.com/faq/?page=fi...ICHIERS_copier


  6. #6
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut
    Réponse dans la FAQ : http://c.developpez.com/faq/?page=fi...ICHIERS_copier


    Désolé, il y rien qui m'aide dans ton lien. j'avais deja fais la verification d'ouverture des fichiers et l'ouverture echoue. mais je ne comprends pas pourquoi vu que mes fichiers sont aux bons emplacements!!!peut etre un problème de configuration?
    Après plusieurs test j'ai remarqué que c'est premier qui ne s'ouvre pas mais deuxieme s'ouvre sans probleme.Meme si je met un chemin absolu pour premier ca ne change rien il ne s'ouvre toujours pas!!

    je viens de voir un truc le 1er fopen ne fonctionne pas.Meme si je remplace le "rb" par "ryhfdjhfjdqshfdjshfjdhfd" le compilateur ne provoque aucune erreur.
    En fait c'est le "r" qui ne marche pas. Si par exemple je le remplace par "wb" ou "w" des fichiers test et text sont crées dans le dossier ou il y avait deja mes fichiers text originaux.Donc je me retouve avec plusieurs fichiers test et text1.
    je sais plus quoi faire parce que la c'est le mot clé "r" qui ne marche pas

  7. #7
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Salut,
    Normalement getcwd() et chdir() devront exister dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <stdlib.h>
    #include <string.h>
    #include <direct.h> // ajouter cet entete
    #define TAILLE_MAX 10
     
    int main(int argc, char *argv[])
    {
       FILE* premier=NULL;
       FILE* deuxieme=NULL;
       char szChemin[MAX_PATH];
     
       char chaine[TAILLE_MAX] = "";
     
       getcwd(szChemin,MAX_PATH); /* recuperer le repertoire courant Current Working Directory */
     
       premier=fopen("test","rb");
       deuxieme=fopen("text1.txt","w");
       if (premier != NULL && deuxieme!= NULL)
       {
          while (fgets(chaine, TAILLE_MAX, premier) != NULL) 
          {
             printf("%s", chaine);// On affiche la chaîne qu'on vient de lire
             fprintf(deuxieme,"%s",chaine);// on copie ds le 2nd fichier le contenu en binaire du 1er
     
          }
          fclose(deuxieme);
          fclose(premier);
       }
       else
       {
          printf("erreur d'ouverture des fichiers");
       }
     
       chdir(szChemin); /* revenir au repertoire courant */
       return 0;
    }
    Je l'ai pas compilé. essaye de le compiler pour voir s'il n y pas d'erreur
    De tout façon c'est un reflex a prendre, pour plutard

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut balise + SMS
    Citation Envoyé par buggen25 Voir le message
    Salut,
    Normalement getcwd() et chdir() devront exister dans le code
    Elles servent à quoi exactement ces fonctions ?
    Je les ai rajoutées mais mon problème reste le meme. Le "rb" marche pas (voir + haut).

  9. #9
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Re
    Enfaite quand tu lance ton programme (le fichier .exe) se trouve dans le repertoire retourné par getcwd()
    Exemple :
    si tu execute le programme qui se trouve dans c:\repertoire , getcwd va retourner "c:\repertoire"
    Avec chdir tu vas changer le repertoire vers "c:\repertoire".
    Au cas ou tu fasse un appel qui va changer le repertoire courant, par ex tu fais appel a une impression dans tes futurs programmes

    Pour ton problème, il faut que l'executable ainsi que les deux fichiers que tu ouvres avec fopen soient dans le meme repertoire sinon rien ne va se passer !

    Avant de faire les tests d'ouverture fais des exemple simple. et essaye de lire les données du fichier ouvert avec fopen en mode lecture en binaire "rb"

  10. #10
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut
    Avant de faire les tests d'ouverture fais des exemple simple. et essaye de lire les données du fichier ouvert avec fopen en mode lecture en binaire "rb"
    Alors comme je l'avais dit codeblock crée lui meme ses fichiers test et text1.Quand je copie du texte dans test alors le prog s'execute correctement et la copie est effectuée dans text1 qui a été crée par codeblock.Ce que codeblock n'arrive par a faire c'est ouvrir le fichier test que moi j'ai crée.

  11. #11
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    juste betement ton premier fichier n'a pas d'extension ou c'est que tu as oublie? si l'extension est .txt et que tu as pas mise alors tu auras un fichier non trouve. verifies ca aussi.

  12. #12
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Par défaut
    Citation Envoyé par lilington Voir le message
    juste betement ton premier fichier n'a pas d'extension ou c'est que tu as oublie? si l'extension est .txt et que tu as pas mise alors tu auras un fichier non trouve. verifies ca aussi.

    bah justement lextension demes fichiers sont .txt et ceux de codeblock n'ont pas d'extension.je les force à s'ouvrir avec BlocNote!!

  13. #13
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    tu es sous windows? si oui affiches les extensions et verifie car en C les extensions sont obligatoire meme si ton systeme ne les affiches pas. donc verifies bien que tu ais bien les extensions et lesquelles puis tu les ajoutes sinon fait enregistrer sous avec ton editeur de text et tu specifies bien l'extension;

Discussions similaires

  1. [PHP 5.2] Probleme avec les fonctions fopen fwrite
    Par zeyro dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2009, 15h34
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo