begin process at 2012 05 29 11:47:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

jeudi 29 janvier 2009 à 23:39:43 | fopen(pathFile,"mode") error stream!=NULL

Yannikator

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:

[code]
externe char *pathFile;

void function()
{
pathFile=getPath(1);
fopen(pathFile,"+r");//et c'est ici qu'il y a un problème
...
}
[/code]
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:
[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;
}
[/code]
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.
vendredi 30 janvier 2009 à 10:56:18 | Re : fopen(pathFile,"mode") error stream!=NULL

buno

Administrateur CodeS-SourceS
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...
vendredi 30 janvier 2009 à 13:11:37 | Re : fopen(pathFile,"mode") error stream!=NULL

Yannikator

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.
vendredi 30 janvier 2009 à 13:48:40 | Re : fopen(pathFile,"mode") error stream!=NULL

buno

Administrateur CodeS-SourceS
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...
dimanche 1 février 2009 à 15:53:14 | Re : fopen(pathFile,"mode") error stream!=NULL

Yannikator

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.
@+
lundi 2 février 2009 à 11:33:21 | Re : fopen(pathFile,"mode") error stream!=NULL

buno

Administrateur CodeS-SourceS
Réponse acceptée !
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...
mercredi 4 février 2009 à 11:24:54 | Re : fopen(pathFile,"mode") error stream!=NULL

Yannikator

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.
vendredi 6 février 2009 à 22:39:05 | Re : fopen(pathFile,"mode") error stream!=NULL

Yannikator

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!


Cette discussion est classée dans : fichier, buffer, path, mode, pathfile


Répondre à ce message

Sujets en rapport avec ce message

Lire et ecrire dans un fichier en mode binaire [ par vbnul ] Je cherche comment lire et ecrire dans un fichier en mode binaire car on ne peut lire certains "caracteres" binaires dans les EXE par exemple.qqn pour ecriture en mode insertion [ par loopy ] Salut, je voudrais savoir s'il est possible de rajouter des infos dans un fichier (en mode texte) sans que cela efface les infos precedentes car je do lecture dans un fichier TXT en C# (caractere) [ par haribo ] je cherche les fonctions C plus plus qui permette de faire la lecture dans un fichier TXT des caracteres. en mode mode caractere par caractete.merci d API Win32, problème de variable [ par bouba ] Salut a tous, j'ai un blem de variable dans mon programme. Voici mon code source.LPSTR Path="";LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM Récupération du chemin d'un fichier dans le 'path' [ par BettaSplendens ] Bonjour,j'ai 2 choses... d'un côté le chemin avec laquelle est lancée mon application, qui comporte "bien entendu" plusieurs répertoires.. désignons i Imprimer un fichier dxf sous linux [ par SabMoisin ] Bonjour!Je voudrais savoir comment programmer en c++ sous linux pour imprimer un fichier au format dxf.Je sais déjà imprimer en mode hpgl vu que l'imp ecrire dans un fichier [ par bellionl ] salut,voila depuis une semaine je tente de conprendre le c++ avec borland c++ builderle problème est quand je veut écrire dans un fichier.création du Matez ça! :) [ par MaDC ] J'ai un soucis avec mon appli MFC.Je voudrais ouvrir un document avec ça :void CCommandeRobotView::OnFileOpen() { CFileDialog fenetreDlg( true, NU Comment retrouver le path en ayant que le nom du fichier [ par Xentor609 ] salut!Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !Avec les process, je n'obtiens que le nom du fic Mettre un fichier .exe dans un buffer [ par guiguikun ] Je n'arrive pas a mettre un fichier executable en memoire.sur les 100Ko du fichier, mon buffer ne compte que les 3 premiers octets (caracteres)voici m


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales