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

Fermé
songeurs Messages postés 9 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 20 avril 2021 - 7 avril 2021 à 00:16
 Utilisateur anonyme - 7 avril 2021 à 17:36
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

Utilisateur anonyme
7 avril 2021 à 00:53
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) ...
0
songeurs Messages postés 9 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 20 avril 2021
7 avril 2021 à 12:22
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 !
0
Utilisateur anonyme
7 avril 2021 à 17:36
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.
0