Problème avec "fclose"

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 6 juil. 2006 à 17:33
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 31 juil. 2006 à 13:30
Bonjours, cas fais 2 heures que je cherche mon bug et je ne trouve pas! C'est frustrant!
J'ai fais pas mal de test et je ne trouve rien.
Je met donc mon code sur le poste (cas fais longtemps que je n'ai pas fais de C, 4/5 ans, et là vraiment je ne m'en sort pas!)

#include <cstdlib>
#include
#include <string.h>
#include <stdlib.h>
typedef unsigned long ErreurCode;

ErreurCode ChercheTextDansFichier (FILE * Fichier, char * TextAChercher, unsigned long * Position)
{
char * Tempon;
unsigned long PositionFichier = 0;
unsigned long PositionChaine = 0;
unsigned long TailleFichier;
    fseek (Fichier, 0, SEEK_END);
    TailleFichier = ftell(Fichier);
    fseek (Fichier, 0, SEEK_SET);
    Tempon = (char *)malloc(strlen(TextAChercher));
    while (!(feof(Fichier)) && (PositionChaine < strlen(TextAChercher)))
    {
        PositionFichier++;
        Tempon[PositionChaine] = (char)fgetc (Fichier);
        PositionChaine++;
        Tempon[PositionChaine] = '\0';
        if (strncmp(TextAChercher,Tempon,PositionChaine) != 0)
        {
             PositionChaine = 0;
        }
    }
    if (feof(Fichier))
    {
        *Position = 0;
    }
    else
    {
        *Position = PositionFichier - strlen(TextAChercher);
    }
    free (Tempon);
    return 0;
}

ErreurCode LitDonneeBaliseFichier (FILE * Fichier, char * Balise, char ** Donnee)
{
unsigned long PositionDepart;
unsigned long PositionFin;
char * Tempon;

    Tempon = (char *)malloc (strlen(Balise) + 3);
    Tempon[0] = '<';
    Tempon[1] = '\0';
    strcat (Tempon, Balise);
    strcat (Tempon,">");
    ChercheTextDansFichier (Fichier, Tempon, &PositionDepart);
    PositionDepart += (strlen(Tempon)); //Position de début de balise (donc carac '<') - carac de fin de chaine
    Tempon[1] = '/';
    Tempon[2] = '\0';
    strcat (Tempon, Balise);
    strcat (Tempon,">");
    ChercheTextDansFichier (Fichier, Tempon, &PositionFin); //position de début de balise donc OK
    *Donnee = (char *)malloc (PositionFin - PositionDepart + 2); //+1 car carac de fin de chaine + 1 (fichier commance à 0 et malloc à 1)
    *Donnee[0] = '\0';
    fseek (Fichier, PositionDepart, SEEK_SET);
    PositionFin -= PositionDepart;
    PositionDepart = 0;
    while (PositionDepart < PositionFin)
    {
        (*Donnee)[PositionDepart] = (char)fgetc (Fichier);
        PositionDepart ++;
    }
    (*Donnee)[PositionDepart] = '\0';
    free (Tempon);
    return 0;
}

int main(int argc, char *argv[])
{
FILE * FichierXML;
char * Texte;
    FichierXML = fopen("D:\\schema_bodacc_Bilan_V2006.01.xml","r");
    LitDonneeBaliseFichier (FichierXML,"versionSchema",&Texte);
    printf ("Fin de test valeur :\n%s\n",Texte);
    free (Texte);
    system("PAUSE");
    fclose(FichierXML);
    system("PAUSE");
    return 0;
}

PS : Je compile avec "Dev-C++".
PS² : Si vous avez une meilleur syntax (pour autre chose que le "fclose") vous pouvez bien sur me la faire parvenir.
Merci.
D'oh! Nuts!
Mmmmm...
 DONUTS

45 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
13 juil. 2006 à 11:42
Désolé pour mon absence prolongé j'ai heu de gros problèmes
interne à gérer hier (rien à voir avec notre problème).
<!--[endif]-->


Le fflush(FichierXML); est présant et est juste avant le
fclose(FichierXML);
<!--[endif]-->


J'ai renommé mon fichier (main.c) en fichier .cpp (dans le gestionnaire
de projet), cas ne marche pas!<!--[if gte vml 1]><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:11.25pt;
height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="/imgs2/smile_sad.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

Modifier le compilo du projet en C++, cas ne marche pas!<!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="/imgs2/smile_sad.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

J'ai reconstruit en le projet avec comme compilo C++ au lieu de C et cas plante
toujours!<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="/imgs2/smile_sad.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

<!--[if gte vml 1]><v:shape
id="_x0000_i1028" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"
o:href="/imgs2/smile_clown.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
Je garde pour le moment la solution du printf("");. (Je trouve toujours cette erreur étrange)


Merci à tous de votre aide.<!--[if gte vml 1]><v:shape id="_x0000_i1029"
type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\VIW\LOCALS~1\Temp\msohtml1\01\clip_image003.gif"
o:href="/imgs2/smile_cool.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->


J'ai d'autre fonction à développé je reviendrais à ce problème plus tard (je
posterais sur ce topic). Vous pouvez me faire parvenir vos idée je testerais
avec plaisir, moi je ne sais plus quoi faire.



D'oh! Nuts!
Mmmmm...
 DONUTS
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
31 juil. 2006 à 12:07
Re,

utilise [www.codeblocks.org/ code::blocks] , c'est en quelque sorte le successeur de dev-cpp


J'ai jamais eut le moindre problème avec !!

TuRn3r
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
31 juil. 2006 à 12:18
Heeeee, c'est très gentil mais je ne peux pas ouvrir ton
lien :


[www.codeblocks.org/ code::blocks]







D'oh! Nuts!
Mmmmm...
 DONUTS
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
31 juil. 2006 à 13:15
[www.codeblocks.org www.codeblocks.org
]

TuRn3r
0

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

Posez votre question
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
31 juil. 2006 à 13:30
Merci encors.
A+

D'oh! Nuts!
Mmmmm...
 DONUTS
0
Rejoignez-nous