OVH Cloud OVH Cloud

WSH - Fichier texte en écriture additionnel simultané ou presque

5 réponses
Avatar
GOWAP
Bonjour,

sous Dos, avec un "echo text>>fichier.txt", j'ajoute à un fichier ascii
séquentiel un message.
Cela peut être fait plus ou moins simultanément de plusieurs ordinateur à la
fois, dans le cas d'un script d'ouverture de session utilisant un fichier
log par exemple.

Sous WSH/VBS, pouvez vous me dire comment je peux posséder pour effectuer le
même (ou équivalente) ajout de texte dans un fichier ascii acceptant
l'écriture plus ou moins simultané. Quand je demande en WSH, je n'attend pas
un Shell.run ("cmd /c echo text>>fch.txt) mais bien des commandes VBS ou WMI
digne de ce nom. Car d'après MS, dans Vista, adieu le cmd.exe (c'est pas
encore fait, il faudra attendre le SP1 de vista voir peut être le SP2).

L'idée est de pouvoir écris dans un log Ascii à partir d'un script wsh/vbs
exécuter dans un script de session ou de connexion afin de remonter des
informations d'erreur.

Merci de vos suggestions,
GOWAP

5 réponses

Avatar
Georges MAUREL
Bonjour,
Voici un exemple tiré de la documentation wscript

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:testfile.txt", ForAppending, True)
f.Write "Bonjour !"
f.Close

Cordialement
Georges

"GOWAP" <gowap@@@fr.fm> a écrit dans le message de news:

Bonjour,

sous Dos, avec un "echo text>>fichier.txt", j'ajoute à un fichier ascii
séquentiel un message.
Cela peut être fait plus ou moins simultanément de plusieurs ordinateur à
la fois, dans le cas d'un script d'ouverture de session utilisant un
fichier log par exemple.

Sous WSH/VBS, pouvez vous me dire comment je peux posséder pour effectuer
le même (ou équivalente) ajout de texte dans un fichier ascii acceptant
l'écriture plus ou moins simultané. Quand je demande en WSH, je n'attend
pas un Shell.run ("cmd /c echo text>>fch.txt) mais bien des commandes VBS
ou WMI digne de ce nom. Car d'après MS, dans Vista, adieu le cmd.exe
(c'est pas encore fait, il faudra attendre le SP1 de vista voir peut être
le SP2).

L'idée est de pouvoir écris dans un log Ascii à partir d'un script wsh/vbs
exécuter dans un script de session ou de connexion afin de remonter des
informations d'erreur.

Merci de vos suggestions,
GOWAP



Avatar
GOWAP
Merci, mais...

Que ce passe-t-il si je fais un "Set f =
fso.OpenTextFile("svrpatagefch.txtt", ForAppending, True)" en début de
traitement sans "close" alors que j'ai 50 script en cours sur le réseau ?
Est-ce que chaque "f.Write "Bonjour !"" s'ajouter bien à la fin du fichier
ou est-ce qu'il va y avoir un problème ?

Dois-je faire un f.close et un f.OpenTextFile("svrpatagefch.txtt",
ForAppending, True) sans arrêt à chaque écriture ?
Que se passe-t-il si deux script sont en "open" en même temps ? (qui gagne
?)
Est-ce que le "ForAppending" gére ce mode d'écriture simultané ?

Merci de m'expliquer le fonctionnement
GOWAP




"Georges MAUREL" <georges.maurel_at_free.fr> a écrit dans le message de
news: %23AI2$
Bonjour,
Voici un exemple tiré de la documentation wscript

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:testfile.txt", ForAppending, True)
f.Write "Bonjour !"
f.Close

Cordialement
Georges

"GOWAP" <gowap@@@fr.fm> a écrit dans le message de news:

Bonjour,

sous Dos, avec un "echo text>>fichier.txt", j'ajoute à un fichier ascii
séquentiel un message.
Cela peut être fait plus ou moins simultanément de plusieurs ordinateur à
la fois, dans le cas d'un script d'ouverture de session utilisant un
fichier log par exemple.

Sous WSH/VBS, pouvez vous me dire comment je peux posséder pour effectuer
le même (ou équivalente) ajout de texte dans un fichier ascii acceptant
l'écriture plus ou moins simultané. Quand je demande en WSH, je n'attend
pas un Shell.run ("cmd /c echo text>>fch.txt) mais bien des commandes VBS
ou WMI digne de ce nom. Car d'après MS, dans Vista, adieu le cmd.exe
(c'est pas encore fait, il faudra attendre le SP1 de vista voir peut être
le SP2).

L'idée est de pouvoir écris dans un log Ascii à partir d'un script
wsh/vbs exécuter dans un script de session ou de connexion afin de
remonter des informations d'erreur.

Merci de vos suggestions,
GOWAP







Avatar
Do Re Mi chel La Si Do
Salut !


Es-tu sûr de l'abandon de cmd.exe (et command.com) ? Ce n'est pas parce que
des journalistes ont écrit que Monad allait remplacer cmd, que ce dernier va
disparaître. D'ailleurs, peut-on appeler "journaliste", qui ne fait que du
"copié/collé" ?

Vu le nombre de logiciels, d'outils, et de langages qui fonctionnent sous ce
mode, je doute de la disparition de l'invite de commande.

Ceux qui ont testé Windows-Vista bêta pourront peut-être nous en dire plus.


@-salutations

Michel Claveau
Avatar
Georges MAUREL
Re bonjour,
A priori, forappending bloque le fichier.
Il faut donc bien faire un close après écriture pour le débloquer
Et il faut transformer l'exemple d'origine pour utiliser une boucle du style
suivant permettant d'attendre la libération du fichier :

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Do
Err.Clear
set f =fso.OpenTextFile("c:testfile.txt",ForAppending,True)
If Err Then
WScript.Sleep 50
end if
Loop While Err
On Error GoTo 0
f.Write "Bonjour !"
f.Close

Il en va de même pour forwriting.
Par contre for reading ne bloque pas le fichier

Cordialement
Georges



"GOWAP" <gowap@@@fr.fm> a écrit dans le message de news:

Merci, mais...

Que ce passe-t-il si je fais un "Set f =
fso.OpenTextFile("svrpatagefch.txtt", ForAppending, True)" en début de
traitement sans "close" alors que j'ai 50 script en cours sur le réseau ?
Est-ce que chaque "f.Write "Bonjour !"" s'ajouter bien à la fin du fichier
ou est-ce qu'il va y avoir un problème ?

Dois-je faire un f.close et un f.OpenTextFile("svrpatagefch.txtt",
ForAppending, True) sans arrêt à chaque écriture ?
Que se passe-t-il si deux script sont en "open" en même temps ? (qui gagne
?)
Est-ce que le "ForAppending" gére ce mode d'écriture simultané ?

Merci de m'expliquer le fonctionnement
GOWAP




"Georges MAUREL" <georges.maurel_at_free.fr> a écrit dans le message de
news: %23AI2$
Bonjour,
Voici un exemple tiré de la documentation wscript

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:testfile.txt", ForAppending, True)
f.Write "Bonjour !"
f.Close

Cordialement
Georges

"GOWAP" <gowap@@@fr.fm> a écrit dans le message de news:

Bonjour,

sous Dos, avec un "echo text>>fichier.txt", j'ajoute à un fichier ascii
séquentiel un message.
Cela peut être fait plus ou moins simultanément de plusieurs ordinateur
à la fois, dans le cas d'un script d'ouverture de session utilisant un
fichier log par exemple.

Sous WSH/VBS, pouvez vous me dire comment je peux posséder pour
effectuer le même (ou équivalente) ajout de texte dans un fichier ascii
acceptant l'écriture plus ou moins simultané. Quand je demande en WSH,
je n'attend pas un Shell.run ("cmd /c echo text>>fch.txt) mais bien des
commandes VBS ou WMI digne de ce nom. Car d'après MS, dans Vista, adieu
le cmd.exe (c'est pas encore fait, il faudra attendre le SP1 de vista
voir peut être le SP2).

L'idée est de pouvoir écris dans un log Ascii à partir d'un script
wsh/vbs exécuter dans un script de session ou de connexion afin de
remonter des informations d'erreur.

Merci de vos suggestions,
GOWAP











Avatar
Michel Claveau
Bonjour !

J'ai vu qq infos sur windows vista, là :
http://msdn.microsoft.com/windowsvista/support/faq/default.aspx



Et, notamment, cette QR :

Will my MS-DOS applications continue to run under Windows Vista without
modification?



Yes, they will.