Fermer puis rouvrir un streamreader ou textreader

Résolu
Henkala Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 11 juin 2014 - 19 juin 2009 à 10:34
Henkala Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 11 juin 2014 - 23 juin 2009 à 11:12
Bonjour,

j'ai un problème avec un programme en vb, je m'explique, je fais un ping avec un renvoie d'errorlevel dans un fichier texte, j'ai donc besoin de lire dans ce fichier texte la réponse, ce que je fais à l'aide du streamreader, or dans ce même programme je suis appelé à réutiliser le ping renvoyant au fichier texte, et donc étant déjà utilisé par le processus de lecture du fichier la réponse ne peut pas être inscrite, et je n'ai pas d'état du ping.

J'ai donc essayé de faire un dispose ou même un close pour arrêter ce processus afin de pouvoir réécrire dessus mais je n'arrive plus à lire la réponse après car ce processus a été justement arrêter auparavant.
 
Je ne sais pas quoi faire ! Aidez moi s'il vous plait !

Merci d'avance,

Cordialement,

7 réponses

Henkala Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 11 juin 2014
23 juin 2009 à 11:12
Bonjour,

N'ayant pas trouvé d'informations intéressantes sur System.Net.socket ou même System.Net.IPAdress j'ai donc essayé de chercher des solutions pour ma méthode précédente qui était d'utiliser les .bat pour arriver à mes fins à l'aide d'un ping.

Je me suis aperçu que lorsque que je faisait la déclaration de mon streamreader, que je récupérais l'info du ping dans celui-ci et que je le ferme (dispose), tout cela dans une boucle while mon streamreader se redéclarait donc et l'opération recommençait sans problème, le processus (streamreader)  pouvant être fermé à volonté je peux donc remplacer le fichier reponse.txt et lire la nouvelle information de mon errorlevel.

Mon problème est donc résolu, j'ai même caché les fenètres MS-DOS qui s'ouvraient à chaque commande shell :
shell("le chemin vers le .bat ou .cmd", AppWinStyle.hide)

Merci de ton aide mayzz ,

Cordialement,
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
20 juin 2009 à 13:55
Bonjour, je ne comprend pas bien tes explications, peux tu poster le bout de code en rapport ?

Sinon tu peux ouvrir un fichier en paratageant l'acces en lecture/écriture à celui-ci

Dim

fs
As
New FileStream(
"monfichier", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)

Dim sr
As
New StreamReader(fs)

++ Mayzz.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
20 juin 2009 à 13:56
Pwa ! Vive la mise en forme...

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
Henkala Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 11 juin 2014
22 juin 2009 à 08:41
Bonjour,

Tout d'abord merci de vous pencher sur mon problème !

Je vais essayer d'être plus clair :

- J'utilise un .bat pour récupérer le errorlvl d'un ping dans un fichier texte (reponse.txt) du genre :
         -> :begin
               ping -n 1 10.2.224.121
               if not errorlevel 1 goto fin
               echo libre>reponse.txt
               goto fin2
               :fin
               echo utilisee>reponse.txt
               :fin2

-Je lis le contenu de ce fichier text à l'aide d'un streamreader :
         -> Dim monStreamReader
As
New System.IO.StreamReader(
"C:\VB\Change Ip\Change Ip\bin\debug\reponse.txt") 
                  
Dim ligne
As
String 

-
Une fois lu si la réponse est "libre" ou "utilisee", soit je recommence un ping avec remplacement du fichier réponse, soit j'applique l'ip libre au pc.

Or ici le problème vient du fait qu'en utilisant un streamreader le fichier reponse.txt est directement utilisé par un processus (le streamreader il me semble est ce processus),  il est donc impossible de remplacer ce dernier, et donc impossible de déterminer si une autre ip est libre.

Voilà ! En espérant avoir été précis et concis, je vous remercie d'avance,

Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Henkala Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 11 juin 2014
22 juin 2009 à 08:44
Superbe mise en forme .... !
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
22 juin 2009 à 11:54
Ah oui effectivement ! Ton problème est d'utiliser le système de fichier pour communiquer d'une application vers une autre, ce n'est pas vraiment la bonne méthode, en effet le système de fichier est au départ, fait pour stocker des informations sur le disque à long tèrme.

Lors ce qu'un fichier est ouvert par une application quelconque, il est en effet impossible à windows de supprimer celui-ci. Sauf dans le cas ou le programme, garde les informations en mémoie pour fermer ce dernier, ce qui est le cas par exemple pour NotePad. Comme tu le précise plus haut c'est ce que tu fais, tu ferme le stream (close), pour garder les informations en mémoire. Ce qui devrais permettre à ton batch de recommencer à réécrire dans le fichier (en le supprimant si  celui-ci est existant).

Vérifi donc, que ce ne soit pas ton batch, qui bloque le fichier, cela peut aussi venir de la, aussi vérifi les attributs du fichier créer (lecture seule, etc...).

Pour ce qui est de ton projet, pourquoi n'essayerais tu pas simplement de vérifier les ip à partir de vb ? Sans passer par un batch ? Il doit exsiter un moyen (par exemple via la classe System.Net.Socket) de se connecter à l'adresse IP, puis de récupérer l'erreur si l'hote est introuvable, de plus ce sera peut être meilleur qu'un ping, car un ping raté sur une adresse ne garanti pas que celle ci n'est pas attribué, l'ordianteur disant peut avoir un anti-virus ou être configurer pour ne pas répondre au ping, ou encore, si tu dispose d'une connexion WIFI les paquets peuvent se perdre dans la nature... Il doit exister un moyen de savoir si un IP est attribué en vb je pense.

@+ Mayzz 
                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
Henkala Messages postés 16 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 11 juin 2014
22 juin 2009 à 14:11
Je vais chercher des infos sur System.Net.socket ou même System.Net.IPAdress pour voir (j'ai déjà cherché succintement dans cette voie mais je n'ai pas trouvé de réelles réponses) car l'utilisation des .bat me semble aussi mauvaise, mais me paraissait plus simple d'application dans un premier temps, or avec ces bat j'ai des problèmes avec les accents("connexion rÉseau local" par exemple) et le remplacement du fichier reponse.txt par le "ping adresse>reponse.txt".

Si tu as d'autres infos sur comment obtenir des infos sur des ip avec VB je suis preneur !

Cordialement,
0
Rejoignez-nous