Fermer puis rouvrir un streamreader ou textreader [Résolu]

Henkala 16 Messages postés jeudi 4 juin 2009Date d'inscription 11 juin 2014 Dernière intervention - 19 juin 2009 à 10:34 - Dernière réponse : Henkala 16 Messages postés jeudi 4 juin 2009Date d'inscription 11 juin 2014 Dernière intervention
- 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,
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Henkala 16 Messages postés jeudi 4 juin 2009Date d'inscription 11 juin 2014 Dernière intervention - 23 juin 2009 à 11:12
3
Merci
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,

Merci Henkala 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de Henkala
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 20 juin 2009 à 13:55
0
Merci
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. <
Commenter la réponse de Mayzz
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 20 juin 2009 à 13:56
0
Merci
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. <
Commenter la réponse de Mayzz
Henkala 16 Messages postés jeudi 4 juin 2009Date d'inscription 11 juin 2014 Dernière intervention - 22 juin 2009 à 08:41
0
Merci
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,
Commenter la réponse de Henkala
Henkala 16 Messages postés jeudi 4 juin 2009Date d'inscription 11 juin 2014 Dernière intervention - 22 juin 2009 à 08:44
0
Merci
Superbe mise en forme .... !
Commenter la réponse de Henkala
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 22 juin 2009 à 11:54
0
Merci
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. <
Commenter la réponse de Mayzz
Henkala 16 Messages postés jeudi 4 juin 2009Date d'inscription 11 juin 2014 Dernière intervention - 22 juin 2009 à 14:11
0
Merci
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,
Commenter la réponse de Henkala

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.