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 :

probl�me avec fopen


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 3
    Par d�faut probl�me avec fopen
    Bonsoir, j'utilise la fonction fopen sous windows XP tout se passe bien mais au bout d'un moment la fonction me retourne un pointeur null. Fichier ou r�pertoire inexistant!! alors qu'ils existes.
    Avez-vous eu vent d'un tel probl�me?

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    //---------------------------------------------------------------------------
    void __fastcall TFEditionEssai::SaveEssai (AnsiString FileName)
    {
      FILE *hf ;
      TTreeNode* NodeEssai ;
      PStructEssai  DEssai;
      PStructCycleRef  DCycleRef;
      PStructPasTemp  DPasTemp;
      PStructSauv  DSauv ;
      PStructCycleEnd  DCycleEnd;
      PStructPasEnd  DPasEnd;
      int MyNodeType ;
     
     
      hf = fopen (FileName.c_str(), "w+b") ;
     
      if (hf == NULL)
      {
         ShowMessage(strerror(errno));
         return ;
      }
     
     
      TTreeNode *CurItem = TreeViewCycle->Items->GetFirstNode();
     
     
      while (CurItem)
      {
        MyNodeType = CurItem->ImageIndex;
        switch (CurItem->ImageIndex )
               {
                  case ntEssai:
                    fwrite (&MyNodeType , sizeof (int), 1, hf);
                    DEssai = new TStructEssai;
                    DEssai = PStructEssai(CurItem->Data);
                    fwrite (DEssai, sizeof (TStructEssai), 1, hf) ;
                    break ;
                  case ntCycleRef:
                    fwrite (&MyNodeType , sizeof (int), 1, hf);
                    DCycleRef = new TStructCycleRef;
                    DCycleRef = PStructCycleRef(CurItem->Data);
                    fwrite (DCycleRef, sizeof (TStructCycleRef), 1, hf) ;
                    break ;
                  case ntPasTemp:
                    fwrite (&MyNodeType , sizeof (int), 1, hf);
                    DPasTemp = new TStructPasTemp;
                    DPasTemp = PStructPasTemp(CurItem->Data);
                    fwrite (DPasTemp, sizeof (TStructPasTemp), 1, hf) ;
                    break ;
                  case ntCycleEnd:
                    fwrite (&MyNodeType , sizeof (int), 1, hf);
                    DCycleEnd = new TStructCycleEnd;
                    DCycleEnd = PStructCycleEnd(CurItem->Data);
                    fwrite (DCycleEnd, sizeof (TStructCycleEnd), 1, hf) ;
                    break;
                  case ntSauvegarde:
                    fwrite (&MyNodeType , sizeof (int), 1, hf);
                    DSauv = new TStructSauv;
                    DSauv = PStructSauv(CurItem->Data);
                    fwrite (DSauv, sizeof (TStructSauv), 1, hf) ;
                    break ;
                  case ntPasEnd:
                    fwrite (&MyNodeType , sizeof (int), 1, hf);
                    DPasEnd = new TStructPasEnd;
                    DPasEnd = PStructPasEnd(CurItem->Data);
                    fwrite (DPasEnd, sizeof (TStructPasEnd), 1, hf) ;
                    break;
               }
        CurItem = CurItem->GetNext();
      }    
     
      if (hf)
        fclose (hf) ;
     
    }
    (bigboomshakala)

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut


    AnsiString ? Classes non-template commen�ant par T ?
    C'est du Borland, �a, non ?

    Et pour savoir si le fichier existe ou non : Tu devrais afficher le nom du fichier, ainsi que celui du r�pertoire courant si le chemin est relatif. Histoire d'�tre s�r que c'est bien le bon fichier que la fonction recherche...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre chevronn�
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    D�tails du profil
    Informations personnelles :
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par d�faut
    Salut !

    Tout d'abord, fopen c'est du C, et non du C++ (la diff�rence, c'est que les fonctions C++ sont plus "s�res") : utilise ofstream (�criture) et ifstream (lecture) qui sont bien meilleurs...

    Commence par lire ceci...

    Ensuite, il se peut que ta cha�ne de caract�re ne corresponde pas vraiment au chemin de ton fichier... As-tu v�rifi� (via un std::cout<<FileName par exemple) ?

    [EDIT] Rhaaa ! Grill� dans la r�ponse ! Tou es plou rapide quou mo� !

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 3
    Par d�faut R�ponse � M�dinoc
    Oui c'est bien du Borland Builer 5
    J'ai v�rifier avec l'outil de builder de d�bogage c'est bien le bon fichier et le bon r�pertoire.

    La fonction fopen fonctionne tr�s bien sauf qu'au bout d'un moment elle retourne un pointeur null alors que le fichier existe ainsi que le r�pertoire. La variable FileName est issue d'une boite de dialogue => "SaveEssai(SaveDialog->FileName)". Je vais m�me jusqu'� sp�cifier un autre nom de fichier et emplacement de sauvegarde via la boite de sauvegarde lorsque le probl�me apparait mais sans effet, le pointeur est toujours null. Cet incident est furtif je sais pas trop si c'est li� au temps � XP qui fait des choses !!!!

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    j'ai eu pas mal de probl�mes avec fopen en C++, tu devrais laisser tomber et suivre les conseils de mathieu_t, �a marchera � tous les coups, et sans te poser de questions inutiles!

  6. #6
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Citation Envoy� par poukill
    j'ai eu pas mal de probl�mes avec fopen en C++, tu devrais laisser tomber et suivre les conseils de mathieu_t, �a marchera � tous les coups, et sans te poser de questions inutiles!
    fopen fonctionne tr�s bien en C++ !

  7. #7
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Citation Envoy� par rigobert
    fopen fonctionne tr�s bien en C++ !
    Je sais, mais mon code devait fonctionner parfaitement (post� et approuv� dans ce forum), et ne marchait pas... En passant par les flux, c'�tait ok .
    Je continue � croire qu'il n'aura jamais qqch de magique en info, mais l� je n'ai pas compris!

  8. #8
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Pour info, sais tu que les TTreeView de borland disposent d'une m�thode ReadFromFile()? (De tete, car ca fait un bout de temps que je ne les ai plus utilis�s, TTreeView ->Items->ReadFromFile())

    Ils disposent d'ailleurs aussi de la m�thode SaveToFile(), si mes souvenirs sont bon, au meme endroit

    N'aurais-tu pas plus facile de charger ton TTreeView grace � cette m�thode, quitte � le reparcourrir par la suite pour modifier l'image de chacun des noeud, selon ta propre inspiration?
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  9. #9
    Membre exp�riment�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    336
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 336
    Par d�faut
    Salut,

    quand tu dis "au bout d'un moment" fopen renvoie NULL, tu veux dire "au bout d'un certain nombre de fichiers ouverts" ?
    Si tel est le cas, cela peut �tre une limitation de fichiers ouverts simultan�ment. Pour s'en assurer, tu peux essayer de faire une boucle de fopen (sans faire de fclose) et regarder si c'est toujours � la m�me it�ration que fopen renvoie NULL.

  10. #10
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Citation Envoy� par karl3i
    quand tu dis "au bout d'un moment" fopen renvoie NULL, tu veux dire "au bout d'un certain nombre de fichiers ouverts" ?
    Si tel est le cas, cela peut �tre une limitation de fichiers ouverts simultan�ment. Pour s'en assurer, tu peux essayer de faire une boucle de fopen (sans faire de fclose) et regarder si c'est toujours � la m�me it�ration que fopen renvoie NULL.
    C'est m�me tr�s probablement �a.

    Le nombre de fichiers "ouvrables" simultan�ment par un processus donn� est limit�. De m�moire il me semble que c'est 1024. Mais il me semble aussi que c'est reparam�trable (sous Unix en tout cas).

    Lorsque la limite fix�e est atteinte, fopen renvoie syst�matiquement ... NULL.

    Donc soit il manque un fclose quelque part dans ton programme, et au bout d'un moment �a coince ; soit tu essaies (volontairement) d'ouvrir trop de fichiers.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probl�me avec fopen
    Par Vincent157 dans le forum Visual C++
    R�ponses: 1
    Dernier message: 28/06/2007, 14h14
  2. Probl�me avec fopen
    Par morgan47 dans le forum Langage
    R�ponses: 5
    Dernier message: 21/12/2006, 22h47
  3. Probl�me avec fopen
    Par Fonzy007 dans le forum Langage
    R�ponses: 2
    Dernier message: 24/07/2006, 18h15
  4. [FTP] Probl�me avec fopen sur URL
    Par Biboune2008 dans le forum Langage
    R�ponses: 14
    Dernier message: 22/06/2006, 17h00
  5. Probl�me avec fopen
    Par Binouce dans le forum C
    R�ponses: 10
    Dernier message: 15/01/2006, 13h59

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