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

Turbo Pascal Discussion :

[TP] Trop de fichiers ouverts : plantage


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 36
    Par défaut [TP] Trop de fichiers ouverts : plantage
    Bonjour et bonne année à toutes et tous !

    J'ai un programme qui se met soudainement à planter suite à des regroupements de données parce que lorsque je veux les trier je passe par un fichier intermédiaire qui ne semble pas vouloir se fermer malgré le close et l'erase !
    Lorsque ça plante et que je regarde avec l'explorateur je trouve plein de fichiers tmp et donc trop comme la limite est de 255 sous XP, que pourrais je faire pour y remédier svp ? Merci d'avance pour votre aide

    Bonne continuation

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 467
    Par défaut
    Il faut les fermer correctement, je ne vois pas d'autre solution.

    Poste le bout de code incriminé ici.

  3. #3
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Citation Envoyé par wormful_sickfoot
    Poste le bout de code incriminé ici.

    On va le blanchir ou l'acquiter!!

  4. #4
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 36
    Par défaut
    Je préfère prévenir c'est du lourd mais c'est un vieux programme ...

    Ne soyez pas trop durs merci !
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    assign(ftemp,cheminutil+'tempstat');
      {$i-}
      rewrite(ftemp);
      {$i+}
      If ioresult <> 0
      Then Begin
        affichermessage(13,'Anomalie … la création du fichier TEMPSTAT',
        'Traitement abandonné‚','',True,False);
        sortieano:=True;
      End;
      {$i-}
      close(ftemp);
      {$i+}
      If ioresult <> 0 Then;
      TypeDuCompte := Depense;
      If Not SortieAno Then
      Repeat
        listestat:=Nil;
        CleNom := CadrerIndex(Codcol,3) + ShortToKey(Ord(TypeDuCompte)) + BudgetChoisi
                +'               '+ '       ' ;
        BtClearKey(pfnom,1);
        Repeat
          BTSearchKey(pfnom,1,NoEnreg,CleNom);
        Until Not IsLockError(pfnom,True);
        If Not IsamOk Then
        Begin
          FinFichier := True;
          If IsamError=10210 then
             begin
             {$IfDef TestEur}
            { AfficheString(3,3,'Clenom='+CleNom);
             Delay(5000); }
             {$EndIf}
             Finfichier := True;
             end;
          If IsamError<>10210 Then
          Begin
            AfficherAnomalie(12,'Problème à la lecture des index du fichier COPNOM'+StExocourt,
            'Traitement abandonné‚','');
            SortieAno := True;
          End
        End Else FinFichier := False;
        While Not FinFichier do
        Begin
          Clignote:=Not Clignote;
          AfficheTraitementEnCours(21,clignote);
          Repeat
            BTGetRec(pfnom,NoEnreg,Recept.Enreg,True);
          Until Not IsLockError(pfnom,True);
          If Not IsamOk Then
          Begin
            AfficherAnomalie(12,'Problème à la lecture du fichier COPNOM'+StExoCourt,'',
            '');
            FinFichier := True;
            SortieAno := True;
          End Else
          Begin
            With Recept do
            If (Enreg.NumCol = CodCol)
            And (Enreg.TypeCompte = TypeDuCompte)
            And ((ComptaCol <> M21) Or (Enreg.Article[1] = BudgetChoisi))
            Then Begin
              With Enreg do
              Begin
                GdLivre     := ChaineDe(' ',8);
                WBP := 0; WBS := 0; WDM :=0;
                If TypeCompte = Depense
                Then Anterieur(PfGMvt,Enreg,debit,WBP,WBS,WDM);
                If TypeCompte = Recette
                Then Anterieur(PfGMvt,Enreg,credit,WBP,WBS,WDM);
                Case ComptaCol Of
                M21  :
                  Begin
                    LetReglement:=' ';
                    If Article[1] <> ' ' Then VerifierAnnexe(Article[1],LetReglement);
                    Res:=CompteAutorise(PfTab,LetReglement+Copy(Article,2,length(Article)-1),
                    GdLivre,SensDuSolde,BloquantOuNon,ZBilan);
                  End;
                M1   : Res:=CompteAutorise(PfTab,Article,GdLivre,SensDuSolde,BloquantOuNon,ZBilan);
                M2 :
                  (*If Caractiv = 'G'
                  Then Res := CompteM2AutoriseG(PfTab,Article,GdLivre,SensDuSolde,BloquantOuNon,ZBilan)
                  Else*)
    	      Res := CompteM3M4Autorise(PfTab,Article,GdLivre,SensDuSolde,BloquantOuNon,ZBilan);
                End;
                {Aucun compte n'est exclus : s'il n'est pas présent dans la nomenclature
                de référence,le compte grand Livre sera le compte détaillé}
                While Length(Article) < 16 do Article := Article + ' ';
                If ChaineVide(GdLivre) Then
                If ComptaCol = M2 Then GdLivre := Copy(Article,2,10)
                Else GdLivre := Copy(Article,1,10);
                Article:=EnleverEspacesDroits(GdLivre);
                While Length(Article) < 16 do Article := Article + ' ';
              End;
              If listestat=Nil Then
              Begin
                new(listestat);
                listestat^.tCs:=recept;;
                listestat^.Suiv:=Nil;
                listestat^.Pred:=Nil;
                dernier:=listestat;
              End Else
              Begin
                Aux:=dernier;
                {les éléments du fichier sont toujours ajoutés en fin de liste,
                sauf pour M1 où le nouvel élément peut être éventuellement
                inséré un peu avant les derniers comptes de la liste :
                dans tous les cas, il est intéressant de démarrer le balayage
                de la liste à partir de la fin}
                while (Aux<>Nil) And avant(recept,Aux^.tCs)
                do Aux:=Aux^.Pred;
                If Aux = dernier Then {fin de liste}
                Begin
                  new(dernier^.Suiv);
                  dernier^.Suiv^.Pred:=dernier;
                  dernier:=dernier^.Suiv;
                  dernier^.Suiv:=Nil;
                  dernier^.tCs:=recept;
                End Else
                If Aux = Nil Then     {d‚but de liste}
                Begin
                  new(listestat^.Pred);
                  listestat^.Pred^.Suiv:=listestat;
                  listestat:=listestat^.Pred;
                  listestat^.Pred:=Nil;
                  listestat^.tCs:=recept;
                End Else              {insertion dans la liste}
                Begin
                  new(inser);
                  inser^.Pred:= Aux;
                  inser^.Suiv:=Aux^.Suiv;
                  Aux^.Suiv^.Pred:=inser;
                  Aux^.Suiv:=inser;
                  inser^.tCs:=recept;
                End;
              End;
              Repeat
                BTNextKey(pfnom,1,NoEnreg,CleNom);
              Until Not IsLockError(pfnom,True);
              If Not IsamOk Then
              Begin
                FinFichier := True;
                If IsamError <> 10250 Then
                Begin
                  AfficherAnomalie(12,'Problème index  du fichier COPNOM'+StExoCourt,'',
                  '');
                  SortieAno := True;
                End;
              End;
            End Else FinFichier:=True;
          End;{If Not IsamOk}
        End;{While Not FinFichier}
        {fusion et tri de la liste listestat et du fichier ftri}
        If Not sortieano Then
        If existfile(cheminutil+'ftri') Then
        Begin
          assign(ftemp,cheminutil+'ftri');
          {$i-}
          rename(ftemp,cheminutil+'tempstat');
          {$i+}
          If ioresult <> 0
          Then Begin
            affichermessage(13,'Impossible de renommer le fichier TEMPSTAT',
            'Traitement abandonné ','',True,False);
            sortieano:=True;
          End;
        End;
        If Not sortieano Then
        Begin
          assign(ftri,cheminutil+'ftri');
          assign(ftemp,cheminutil+'tempstat');
          {$i-}
          rewrite(ftri);
          reset(ftemp);
          {$i+}
          If ioresult <> 0
          Then Begin
            affichermessage(13,'Anomalie à l''ouverture des fichiers FTRI et TEMPSTAT',
            'Traitement abandonné','',True,False);
            sortieano:=True;
          End Else
          Begin
            Aux:=listestat;
            fintemp:=eof(ftemp);
            fin:=fintemp And (Aux=Nil);
            If Not fintemp Then read(ftemp,fiche) Else fintemp:=True;
            While Not fin do
            Begin
              If (Aux=Nil) Or (Not fintemp And avant(fiche,Aux^.tCs))
              Then Begin
                write(ftri,fiche);
                If Not eof(ftemp) Then read(ftemp,fiche) Else fintemp:=True;
              End Else
              Begin
                write(ftri,Aux^.tCs);
                If Not fintemp And idem(fiche,Aux^.tCs) Then
                Begin
                  write(ftri,fiche);
                  If Not eof(ftemp) Then read(ftemp,fiche) Else fintemp:=True;
                End;
                Aux:=Aux^.Suiv;
              End;
              fin:=fintemp And (Aux=Nil);
            End;{While Not fin}
          End;
          {$i-}
          close(ftemp);
          erase(ftemp);
          close(ftri);
          {$i+}
          If ioresult=0 Then;
        End;
        while listestat<>Nil do
        Begin
          Aux:=listestat^.Suiv;
          Dispose(listestat);
          listestat:=Aux;
        End;
        TypeDuCompte:=Succ(TypeDuCompte);
      Until (TypeDuCompte = BalEntre) Or SortieAno;

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 977
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 977
    Par défaut
    Fio,

    Des balises [ code] [ /code], sans les espaces qui ici ne servent qu'à les invalider, seraient utiles pour rendre le code lisible.

  6. #6
    Membre averti
    Inscrit en
    Septembre 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 36
    Par défaut
    là faut peut-être pas m'en demander trop on n'est qu'en début d'année et en milieu de semaine

    surtout que je ne vois pas trop comment ça marche cette histoire de balises sorry

    y pas moyen de vous faire passer le code dans un fichier texte en pièce jointe ?

Discussions similaires

  1. Parrait il que j ai trop de fichier ouvert, comment controler ceci
    Par pierrot10 dans le forum Administration système
    Réponses: 0
    Dernier message: 21/09/2009, 10h07
  2. Trop de fichiers ouverts
    Par uriotcea dans le forum C++
    Réponses: 31
    Dernier message: 29/01/2009, 18h30
  3. Trop de fichiers ouverts
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/10/2008, 17h02
  4. Pbm compilation trop de fichiers ouverts
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/10/2008, 11h39
  5. Trop de fichiers ouverts ...
    Par djidji dans le forum C
    Réponses: 4
    Dernier message: 01/12/2005, 18h15

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