PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → fFichierTemp() peut générer des erreurs
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)