Lire un fichier qui est en train d'être écrit

Signaler
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Statut
Membre
Dernière intervention
1 novembre 2018
-
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Statut
Membre
Dernière intervention
1 novembre 2018
-
Bonjour,
sur un PC, j'ai un script VBS qui :
- lance sur un serveur un processus qui produit un fichier X,
- puis le VBS va lire le fichier X.
Le problème : le VBS doit attendre que X soit completé pour le lire.

J'ai donc essayé :
- de mettre un délai dans le VBS ; mais je ne suis jamais sûr que le fichier soit complet quand le délai est passé (à moins de mettre un délai très long),
- de modifier le processus pour que, quand X est complet, il génère un second fichier Y, et dans le VBS j'attends que Y existe avant de lire X ; pourtant le VBS ne lit qu'une partie de X alors que X est complet (peut-être un délai du serveur avant que toutes les données soient réellement dans X),
- j'ai modifié le VBS pour boucler sur la lecture tant que la dernière ligne attendue dans X n'est pas lue (je peux l'identifier), même si atendofstream indique la fin de fichier ; mais j'ai à nouveau un fichier partiel ; et je n'ai pas forcement le même nombre de lignes lues à chaque test (donc ca semble bien être un pb de délai sur le serveur avant qu'un fichier soit accessible)

A noter : le processus est en faite des requêtes db2 dont je redirige le résultat dans X.
Une autre idée, solution ?
Merci d'avance.
JC

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Si ton "processus qui produit un fichier X" est une commande Open, tu peux ajouter l'attribut Lock et sa valeur Shared permettant un partage du fichier à la lecture.
Sinon, tu n'as pas le choix, il faut attendre que le process qui est propriétaire du fichier le libère.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Statut
Membre
Dernière intervention
1 novembre 2018

Merci mais le processus est une succession de commandes du genre "db2 select * from toto >> X", donc pas de lock possible.
Ce que je trouve curieux est que la dernière commande db2 est suivie d'un "echo > Y" et que mon VBS attend que Y existe pour lire X. Donc X devrait être complet... mais la lecture en VBS semble prouver le contraire.