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:
Problème de test "IOResult" suite à ouverture fichier (Delphi7)
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) ...
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 !
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.