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 :

Impossible d'écrire dans un fichier


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Impossible d'écrire dans un fichier
    Bonjour à tous,

    Je rencontre actuellement un problème étrange.
    J'ai la fonction suivante:
    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
    void enregistrer_tensions (double*** tensions, struct simulation* simul, int nb_noeuds, TCHAR* pht)
    {
        int h, noeud, pas, test;
        char nom_fichier[TAILLE_SZ] = "";
     
        strcat(nom_fichier, "tensions_");
        strcat(nom_fichier, (char*)pht);
        strcat(nom_fichier, ".har");
     
        FILE * fichier_tensions;
        fichier_tensions = fopen(nom_fichier, "w");
        if (fichier_tensions == NULL)
            return;
     
        fprintf(fichier_tensions, "Simulation: %s\nPHT: %s\n\n", simul->nom, pht);
        fprintf(fichier_tensions, "Noeud\tPas\tRang\tTension\n");
    (...)
        fclose(fichier_tensions);
     
        return;
    }
    censée écrire dans un fichier situé dans le même répertoire que le programme. Or, après exécution, il ne se passe absolument rien: le fichier n'est pas créé et s'il existe déjà il n'est pas modifié. Les différentes fonctions fopen, fprintf et fclose s'exécutent correctement si j'en crois leurs valeurs de retour respectives.

    Là où je ne comprends pas, c'est que cela fonctionnait parfaitement pendant la phase de test, quand les données d'entrée étaient directement écrites dans le code du programme. Les fonctions qui sont utilisées pour entrer les données, et qui ne l'étaient pas en mode test, sont de simples appels de boites de dialogue et des vérifications élémentaires sur les valeurs entrées par l'utilisateur.
    J'ai utilisé CrtCheckmemory pour m'assurer de la bonne gestion du tas et ça n'a pas renvoyé d'erreur.

    Une idée ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par paulo.arras Voir le message
    Bonjour à tous,
    ...
    Les différentes fonctions fopen, fprintf et fclose s'exécutent correctement si j'en crois leurs valeurs de retour respectives.
    ...
    Une idée ?
    Bonjour,

    êtes-vous sur du résultat de vos strcat ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par philippe_21 Voir le message
    Bonjour,

    êtes-vous sur du résultat de vos strcat ?
    Oui, les strcat renvoient bien le nom de fichier attendu.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par paulo.arras Voir le message
    Bonjour à tous,
    censée écrire dans un fichier situé dans le même répertoire que le programme.
    Une idée ?
    Sous linux, le fichier va être écrit dans le répertoire de travail et non pas dans le répertoire ou se trouve votre exécutable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /proc/self/cwd
    /proc/self/exe
    Excusez ma question, mais
    Lancez-vous votre programme depuis le répertoire ou se trouve votre exécutable, ou depuis un autre répertoire (avez-vous modifier le rép de travail ailleurs dans votre prog)? En cherchant après dans le répertoire de l'exécutable ?
    Ou un problème de permissions (peu probable si vous avez testez fopen)
    Vous n'êtes peut-être pas sous Linux (je connais très mal windows)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    outre la remarque ci-dessus sur les répertoires (par défaut, sans précision, le fichier sera créé dans le répertoire où on est), il y a aussi moyen plus élégant de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        strcat(nom_fichier, "tensions_");
        strcat(nom_fichier, (char*)pht);
        strcat(nom_fichier, ".har");
    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf ( nom_fichier, "tension_%s.har", (char*)pht );

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci à vous deux pour ces remarques.
    En effet, il s'agit bien à première vue d'un problème de répertoire de travail. Pour une raison qu'il me reste à déterminer, le programme change de répertoire en cours d'exécution.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par paulo.arras Voir le message
    Merci à vous deux pour ces remarques.
    En effet, il s'agit bien à première vue d'un problème de répertoire de travail.
    Résolu alors ?

    @souviron34 : merci pour l'astuce.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par philippe_21 Voir le message
    Résolu alors ?
    Oui, c'est résolu.
    En fait, au début du programme, je fais un GetOpenFilename pour aller chercher un fichier, ce qui a pour effet de déplacer le répertoire de travail dans celui où se trouve ce premier fichier.

    Merci pour votre aide.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par paulo.arras Voir le message
    Merci pour votre aide.
    De rien, juste une dernière question votre pseudo a un rapport avec votre localisation géogaphique ?

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par philippe_21 Voir le message
    De rien, juste une dernière question votre pseudo a un rapport avec votre localisation géogaphique ?
    Aucune. En réalité, il s'agit de mon nom .

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    ok,
    désolé pour cette question indiscrète,
    en tout cas content que vous ayez résolu votre problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2013, 11h07
  2. Impossible d'écrire dans le fichier de log
    Par JCitrouille dans le forum Logging
    Réponses: 2
    Dernier message: 07/08/2008, 12h52
  3. Impossible d'écrire dans un fichier
    Par Olivier Regnier dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2008, 09h20
  4. Impossible d'écrire dans un fichier
    Par laurentUTC dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/04/2007, 12h18

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