Bonsoir,

Ca fait longtemps que je n'étais pas revenu dans cette zone du forum....

Je viens de découvrir un bug de l'unité System aujourd'hui. Le bug s'exprime avec les variable de type Text, et qu'on a deux variables Text associé au même fichier.

Si l'on fait par exemple

Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
VAR
   F1 : Text;
   F2 : Text;
 
BEGIN
   Assign (F1, 'fichier.txt');
   Rewrite (F1);
   F2 := F1;
   Write (F2, '...');
   Rewrite (F1);
   Write (F2, '...');
   Close (F1);
END.
Le contenu de « fichier.txt » peut être tronqué (et il l'est même souvent). Il manque environ de 200 à 300 caractère dans « fichier.txt »

Le code donné en exemple peut parraître d'une utilité douteuse, mais il arrive que dans des applications complexe, un fichier soit créé, puis que celui ci soit passer à une autre procédure, par l'intermédiaire d'une variable. Tout autant qu'il se peut qu'un fichier doivent être réinitialisé, pour en reprendre la constrution depuis le début (d'où le second rewrite). Et dans ces circonstances, ce bug s'exprime.

Si avant de fermer le fichier on, fait
Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
   Flush (F1);
   Close (F1);
Le problème n'est pas résolu. Mais si on fait
Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
   Flush (F2);
   Close (F1);
Alors le problème est résolu.

Ceci laisse penser que les variable de type Text ne peuvent pas être copier d manière sûre, et que leurs copie ne sont pas strictement des alias du même fichier. Elle se réfère plutôt chacune au même fichier, mais semble disposé de leur propre buffer.

Ceci n'est pas sans poser de soucis, si deux processus différents écrivent dans un même fichier tour-à-tour, en employant des variables différentes.

J'espère ne pas être trop confus dans la manière d'exposer ce bug.

Bonne soirée