Fopen(pathFile,"mode") error stream!=NULL

Résolu
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012 - 29 janv. 2009 à 23:39
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012 - 6 févr. 2009 à 22:39
Bonjour,

Je développe un petit programme en C et je me heurte à un problème que je pense pas incontournable mais j'ai pas d'idée là... J'ai fait un fonction getPath qui permet à l'utilisateur d'entrer le chemin du fichier qu'il veut ouvrir.
Cette fonction me retourne un string:

externe char *pathFile;

void function()
{
pathFile=getPath(1);
fopen(pathFile,"+r");//et c'est ici qu'il y a un problème
...
}

En effet lors de la compilation j'ai aucune erreur, mais quand j'execute le programme celui-ci me retourne une erreur: "stream!=NULL" et bug!
Pourtant j'ai vérifé et pathFile contien bien le chemin du fichier. Voici son code:
char *getPath(int mode)
{
    char buffer[100],*path;
    int i;
    
    /*Le variable mode, permet de déterminer dans quel cas on se trouve. càd si on ve récupérer le path
    d'un fichier ou l'emplacement dans lequel on veut l'enregistrer.*/
    switch(mode){
    case 1:
        printf("Entrez le chemin ou se trouve votre fichier a crypter:\n (ex : C:/mon_dossier/mon_fichier.txt)");
        fgets(buffer,sizeof(buffer),stdin);
        break;
    case 2:
        printf("Entrez le chemin ou vous desirez enregistrer votre fichier crypté:\n (ex : C:/mon_dossierPerso/mon_fichier_a_garder.txt)");
        fgets(buffer,sizeof(buffer),stdin);
        break;
    default:
        printf("erreur dans l'utilisation de la fonction");
        break;
    }
    printf("buffer: %s",buffer);
    system("PAUSE");
    path = (char *) malloc(sizeof(char)*strlen(buffer)+1);

    if(!path)
        exit(1);

    for (i=0;i<((int)strlen(buffer)+1);i++){
        path[i]=buffer[i];
    }
return path;
}

Quelqu'un pourrait il m'aider à résoudre ce problème?
N'hésitez pas à poser des question si je ne suis pas assez clair...
Merci.
A voir également:

7 réponses

BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
2 févr. 2009 à 11:33
Pffiou...Hé bé! J'ai lutté pour trouver le problème...
En fait, c'est tout bête
Quand tu fais un fgets(), ta chaine contient le caractère "entrée" que tu tapes pour valider, il faut donc l'enlever:

char *getPath(int mode)
{
    char buffer[100],*path;
    int i;

    /*Le variable mode, permet de déterminer dans quel cas on se trouve. càd si on ve récupérer le path
    d'un fichier ou l'emplacement dans lequel on veut l'enregistrer.*/
    switch(mode){
    case 1:
        printf("Entrez le chemin ou se trouve votre fichier a crypter:\n (ex : C:/mon_dossier/mon_fichier.txt)");
        fgets(buffer,sizeof(buffer),stdin);
        break;
    case 2:
        printf("Entrez le chemin ou vous desirez enregistrer votre fichier crypté:\n (ex : C:/mon_dossierPerso/mon_fichier_a_garder.txt)");
        fgets(buffer,sizeof(buffer),stdin);
        break;
    default:
        printf("erreur dans l'utilisation de la fonction");
        break;
    }
    printf("buffer: %s",buffer);
    //system("PAUSE");

    path = (char *) malloc(sizeof(char)*strlen(buffer)-1);
    if(!path)
        exit(1);

    for (i=0;i<(int)strlen(buffer)-1;i++)
    {
        path[i]=buffer[i];
    }
    path[i]=0;
    return path;
}

NB: Attention, toutefois à la libération de la mémoire allouée. Généralement, on alloue le pointeur dans la fonction appelante et on le supprime quand on en a plus besoin...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
30 janv. 2009 à 10:56
Hello,
T'aurais pas oublié un pointeur sur le fichier ouvert? Genre: FILE * pFile = fopen(pathFile,"+r");

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
30 janv. 2009 à 13:11
Non ça c'est une inatention de ma part lorsque j'ai retapé le code...
j'ai bien un pointeur :
FILE *file;

file = fopen(pathFile,"+r");

dsl.
0
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
30 janv. 2009 à 13:48
Pas cool... Tu as quoi exactement dans pathFile?
Si tu le fais en debug, file est-il vide ou pas? Est-ce que t'es anti-slashs sont bien doublés?
Tiens, en passant, généralement on met "r+"
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
1 févr. 2009 à 15:53
Et bien en fait, je peux pas savoir, puisqu'il n'arrive pas à l'ouvrir. C'est d'ailleurs ça le problème. Il ne sort pas de fopen().
J'ai essayé deux façons pour le chemin: C:/test.txt  et C:\\test.txt. Les deux fonctionnent normalement sous windows. Sinon j'ai bien mis "r+" c'était une faute de frappe, mais bonne observation car j'avais peut-être mis +r par inadvertence, mais même corrigé ça ne fonctionne toujours pas.
Dis moi comment toi tu ferais par exemple, peut-être que ça m'éguillerais.
Merci pour ton attention buno.
@+
0
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
4 févr. 2009 à 11:24
C'est une possibilité à laquelle j'ai pas pensé en effet... Je vais tester d'enlever fgets,car effectivement le printf() n'affiche pas \n ou \r.
Je vais donc editer ma fonction, et je te tiens au courant (avec un peu de retard peut-être car j'ai plus le net en ce moment)
Merci d'avoir prit le temps de m'aider. 
A bientôt.

Cordialement.
0
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
6 févr. 2009 à 22:39
Bon, du coup j'ai pas enlevé mon fgets, mais j'ai fait un algo qui me supprime le caractère entré avant de le retourner. Maintenant ça marche du tonnerre de dieu hihi. Merci encore buno super ton idée ;)
See you later!!
Enjoy!
0
Rejoignez-nous