Problème de test "IOResult" suite à ouverture fichier (Delphi7)

Signaler
Messages postés
10
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
15 avril 2021
-
Messages postés
353
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
16 avril 2021
-
Bonjour,

Suite à l'ouverture d'un fichier dans la séquence de code ci-dessous, le chemin du fichier étant erroné, "IOResult" est positionné à 3, ce qui est normal.
Mais lors du test "if (IOResult <> 0) then" au lieu de passer dans le traitement pour signaler l'anomalie,.le traitement continue comme si IOResult était à zéro et va se planter sur l'instruction "while (not EOF (FicIn)) do".

Quelqu'un pourrait-il expliquer pourquoi ?

Merci d'avance pour votre aide.

{$I-}
AssignFile (FicIn, CheminEtNomFichier);
FileMode := 0; //Accès en lecture seule
Reset (FicIn); //Ouverture en lecture seule
{$I+}
if (IOResult <> 0) then
begin //Signaler anomalie
...
end
else
begin //Continuer le traitement
while (not EOF (FicIn)) do
begin //Enregs à lire
...
A voir également:

2 réponses

Messages postés
353
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
16 avril 2021
71
Bonjour,

le traitement continue comme si IOResult était à zéro C'est exactement ce qui se passe ! Il faut donc sauvegarder sa valeur dans une variable avec laquelle on va effectuer les tests :

...
Var erreur : integer;
...
{$I-}
AssignFile (FicIn, CheminEtNomFichier);
FileMode := 0; //Accès en lecture seule
Reset (FicIn);  //Ouverture en lecture seule
{$I+}
erreur:=IOResult;
if (erreur<>0) ...
Messages postés
10
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
15 avril 2021

Bonjour,

Cela fonctionne en faisant comme indiqué.

Ce comportement parait quand même bien étrange.
Je fais du Delphi par intermittence depuis l'an 2000 et jusqu'à présent je n'ai pas eu l'occasion de me rendre compte de cette particularité..
Cela veut dire que la valeur n'est plus disponible, sans doute est elle modifiée par des opérations du système ?

En tout cas merci pour cette assistance efficace !
Messages postés
353
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
16 avril 2021
71
De rien :
La valeur est en effet remise à zéro dès qu'on la consulte ou dès lors qu'une autre opération E/S se déroule normalement. Ca à toujours été comme ça en Pascal.