|
fFichierTemp() peut générer des erreurs |
Débuté par Réal, 16 fév. 2004 04:38 - 1 réponse |
| |
| | | |
|
| |
Posté le 16 février 2004 - 04:38 |
fFichierTemp() est censé retourner le nom d'un fichier temporaire unique.
Mais si on a besoin de plusieurs noms de fichiers temporaires dans un temps relativement court, fFichierTemp()retournera le même nom à répétition et non pas un nom unique.
Par exemple, le test suivant en fait la démonstration;
Fichier1,Fichier2,Fichier3,Fichier4 sont des chaines Fichier1=fFichierTemp("ABC", "C:\temp") Fichier2=fFichierTemp("ABC", "C:\temp") Fichier3=fFichierTemp("ABC", "C:\temp") Fichier4=fFichierTemp("ABC", "C:\temp") Trace(Fichier1,Fichier2,Fichier3,Fichier4)
Les variables Fichier1 à Fichier4 ont alors tous le même nom.
D'autres langages ont reconnus cette erreur dès l'arrivé des ordinateurs Pentium qui sont beaucoup rapides et ont créé une fonction garantissant le nom unique dans toutes les conditions.
Quelqu'un connait une solution à cette faille autrement que de rallentir le processus en y ajoutant un MultiTache(50) entre chaque commande? |
| |
| |
| | | |
|
| | |
| |
Posté le 17 février 2004 - 02:40 |
"Réal" <realp@ultra.ca> wrote:
fFichierTemp() est censé retourner le nom d'un fichier temporaire unique.
Mais si on a besoin de plusieurs noms de fichiers temporaires dans un temps relativement court, fFichierTemp()retournera le même nom à répétition et non pas un nom unique.
Par exemple, le test suivant en fait la démonstration;
Fichier1,Fichier2,Fichier3,Fichier4 sont des chaines Fichier1=fFichierTemp("ABC", "C:\temp") Fichier2=fFichierTemp("ABC", "C:\temp") Fichier3=fFichierTemp("ABC", "C:\temp") Fichier4=fFichierTemp("ABC", "C:\temp") Trace(Fichier1,Fichier2,Fichier3,Fichier4)
Les variables Fichier1 à Fichier4 ont alors tous le même nom.
D'autres langages ont reconnus cette erreur dès l'arrivé des ordinateurs Pentium qui sont beaucoup rapides et ont créé une fonction garantissant
le
nom unique dans toutes les conditions.
Quelqu'un connait une solution à cette faille autrement que de rallentir le processus en y ajoutant un MultiTache(50) entre chaque commande?
-------------------------------------------- Une facon serait de modifier les débuts de fichiers ABC pour F1_ à F4_ Ce qui donnerait; Fichier1=fFichierTemp("F1_", "C:\temp") Fichier2=fFichierTemp("F2_", "C:\temp") Fichier3=fFichierTemp("F3_", "C:\temp") Fichier4=fFichierTemp("F4_", "C:\temp")
On obtient alors toujours quatre noms différents, mais il subsiste une possibilité de réplication de nom en réseau.
Une autre méthode - probablement plus fiable, surtout en réseau consisterait à faire une petite procédure dont voici la base;
Nom_unique est une chaine I est un entier InitHasard() Pour I = 1 a 8 Nom_unique=Nom_unique+Caract(Hasard(65,90)) Fin Trace(Nom_unique) |
| |
| |
| | | |
|
| | | | |
| | |
|