IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[PB VB.net]Pb ouverture de fichier deux fois de suite


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut [PB VB.net]Pb ouverture de fichier deux fois de suite
    bonjour, je crée une application destiné à des préleveurs d'échantillons d'eau.

    Leur points de prélèvements à effectués d'après une liste de points (situées dans mon application dans un fichier simple .txt)

    je suis en train de créer un interface d'administration qui permet entre autre d'ajouter un point.

    Pour cela l'utilisateur entre le code du nouveau point dans une textbox.

    Je lance une recherche de ce même code, s'il existe deja dans la liste, un message s'affiche et le code n'est pas créé.
    S'il ne l'ai pas alors il est enregistré.

    Mon problème c'est qu'il n'ouvre qu'une fois mon fichier, donc si le code n'existe pas pas de problème.
    Mais si je réenchaine par un autre point c'est foutu... ou je peux plus ecrire si le code n'existe pas


    comment fermer le processus? ou comment contourner ce problème?

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    Imports System.IO
     
    Public Class Ajout_PSV
     
        Dim recherche As Boolean = False
     
        Dim codepsv As String
     
     
        Sub RecherchePSV()
     
            Dim sr As New StreamReader("\My Documents\aip_ressources\2007.txt")
            Dim AnalyseChaine As String
            Dim uneligne As String
            Do
                uneligne = sr.ReadLine()
                If Not uneligne Is Nothing Then
                    AnalyseChaine = uneligne.IndexOf(";" + codepsv + ";")
                    If AnalyseChaine >= 0 Then MsgBox("Ce code existe déjà") : recherche = True
                Else
                    recherche = False
     
                End If
     
            Loop Until (uneligne Is Nothing)
            sr.Close()
     
        End Sub
     
        Private Sub Button_Valider_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Valider.Click
     
            codepsv = Box_Code_PSV.Text
     
            If Box_Code_PSV.Text = ("") Then
                MsgBox("Aucun code PSV n'a été rentré", MsgBoxStyle.Critical, "Erreur")
            Else
                RecherchePSV()
     
                Dim sw As New StreamWriter("\My Documents\aip_ressources\2007.txt", True)
     
                If recherche Then
                    sw.Write(";")
                    sw.Write(Box_Code_PSV.Text)
                    sw.Write(";")
                    sw.Write(Box_Commune.Text)
                    sw.Write(";")
                    sw.Write(Box_Type_Installation.Text)
                    sw.Write(";")
                    sw.Write(Box_Payeur.Text)
                    sw.Write(";")
                    sw.Write(Box_Installation.Text)
                    sw.Write(";")
                    sw.Write(Box_Nom_PSV.Text)
                    sw.Write(";")
                    sw.Write(Box_Lieu_PSV.Text)
                    sw.Write(";")
                    sw.Write(Box_Type_Eau.Text)
                    sw.Write(";")
                    sw.Write(Box_Responsable.Text)
                    sw.Write(";")
     
                    If CheckBox_Eau.Checked = True Then
                        sw.Write("oui")
                        sw.Write(";")
                    Else
                        sw.Write("non")
                        sw.Write(";")
                    End If
     
                    If CheckBox_Option.Checked = True Then
                        sw.Write("oui")
                        sw.Write(";")
                    Else
                        sw.Write("non")
                        sw.WriteLine(";")
                    End If
                    sw.Close()
                    MsgBox("PSV ajouté")
                    AIP.Show()
                End If
            End If
        End Sub
     
     
    End Class
    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Pourrais-tu donner le message d'erreur que tu reçois ? Si message il y a ^^.

    Griftou.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    L'exception System.IO.IOException n'a pas été gérée
    Message="Le processus ne peut pas accéder au fichier '\My Documents\aip_ressources\2007.txt', car il est utilisé par un autre processus."
    StackTrace:
    à System.IO.__Error.WinIOError()
    à System.IO.FileStream..ctor()
    à System.IO.FileStream..ctor()
    à System.IO.StreamReader..ctor()
    à System.IO.StreamReader..ctor()
    à Assistant_Preleveur.Ajout_PSV.RecherchePSV()
    à Assistant_Preleveur.Ajout_PSV.Button_Valider_Click()
    à System.Windows.Forms.Control.OnClick()
    à System.Windows.Forms.Button.OnClick()
    à System.Windows.Forms.ButtonBase.WnProc()
    à System.Windows.Forms.Control._InternalWnProc()
    à Microsoft.AGL.Forms.EVL.EnterModalDialog()
    à System.Windows.Forms.Form.ShowDialog()
    à Assistant_Preleveur.Administration.Button_Ajout_PSV_Click()
    à System.Windows.Forms.Control.OnClick()
    à System.Windows.Forms.Button.OnClick()
    à System.Windows.Forms.ButtonBase.WnProc()
    à System.Windows.Forms.Control._InternalWnProc()
    à Microsoft.AGL.Forms.EVL.EnterMainLoop()
    à System.Windows.Forms.Application.Run()
    à Assistant_Preleveur.AIP.Main()
    voilà...

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Bin c'est clair je pense. Ton fichier est toujours utilisé et c'est pour ça que tu ne peux pas y accéder en modé écriture.

    Exécute ton code en mode pas à pas et vois si le close s'effectue bien.
    Je pense que tu peux même faire un dispose de ton streamreader pour être sûr.

    Teste déjà ça.

    Griftou.

    EDIT : Au temps pour moi, y a pas de dispose pour le streamreader (du moins, pas en VS2003 qui est la version avec laquelle je travaille)

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    apparament la lecture en boucle du fichier bloque la fermeture de mon stream (sr.close). mais je comprends pas pourquoi. d'ou cela peut il venir?

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Cela ne solutionnera pas ton problème de fermeture de fichier (du moins je ne pense pas) mais comme test de fin de boucle, tu devrais aussi tester ton booleen Recherche car à moins que le code cherche ne se trouve sur la dernière ligne, il sera toujours à false en sortie de boucle (j'espère ne pas raconter de conneries, vais avoir l'air con sinon ).

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    Comment tester ma variable recherche? je comprends pas ce que tu veux dire...

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Bin faire un test pour voir s'il faut sortir de ta boucle ou non.

    Perso, je n'emploie jamais le Do...Loop mais j'présume que ça doit être qqch du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do
    ...
    Loop until (uneligne is nothing or recherche)
    Comme ça dès que ton code est trouvé, tu sors de ta boucle et ne continue pas à lire le fichier. Tu gagnes du temps d'exécuter et surtout, tu évites que ton booleen soit remis à false.

    Griftou.

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    en fait tu avais raison, mais j'avais remplacer ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loop until uneligne is nothing or recherche
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     If AnalyseChaine >= 0 Then
                        MsgBox("Ce code existe déjà")
                        recherche = True
                        Exit Do
                        sr.Close()
                    Else
    lorsqu'il trouvait le code (s'il trovue le code il sort de la boucle)

    Mais de toute façon avec les 2 manière j'ai toujours le même problème... (même en ajoutant un sr.close qui je pense ne sert meme à rien...)

    edit:
    A force de bidouiller j'en reviens toujours à la même conclison, il foire dès que ma variable recherche est à true. car si est a false il enchaine les sauvegarde...

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Oui c'est aussi une façon de faire.

    J'avais bien dit que ça ne résolverait pas ton soucis d'ouverture de fichier.

    Je ne vois pas trop pourquoi tu as cette erreur. Il y a un close de ton streamreader donc ça devrait passer...

    J'vais fouiller un peu, pas motivé pour bosser today.

    Griftou.

  11. #11
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    En fait, je crois que je cherchais du mauvais côté. Le problème ne vient pas du StreamReader mais du StreamWriter.

    Ta ligne "sw.Close()" est un if trop bas. Autrement dit, tu ouvres ton StreamWriter et quand Recherche est à False, il n'est jamais fermé. Tu ne peux donc pas l'ouvrir à nouveau en lecture.

    Teste toujours mais je pense que c'est ça.

    Griftou.

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    J'arrive (comme j'ai marqué dans l'edition du mon message précédent) a sauvegarder plusieurs fois d'affilés ... (c'est déjà ça)

    Sauf si entretemps je trouve un code qui existe deja (cad quand ma variable recherche passe a true en pratique...)

    De toute manière si je clique 2 fois sur "validation" avec un code qui existe ca marche pas (et j'ai rien écrit à ce moment là...)

    Edit:
    autant pour moi c'était effectivement ça la solution...
    Je me suis cassé la tête pour un détail comme toujours...
    Merci de ton aide précieuse et du temps que tu m'a consacré.

  13. #13
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    J'suis pas sûr d'avoir bien compris ce que tu viens d'écrire ^^.

    As-tu bien maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Private Sub Button_Valider_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Valider.Click
     
            codepsv = Box_Code_PSV.Text
     
            If Box_Code_PSV.Text = ("") Then
                MsgBox("Aucun code PSV n'a été rentré", MsgBoxStyle.Critical, "Erreur")
            Else
                RecherchePSV()
     
                Dim sw As New StreamWriter("\My Documents\aip_ressources\2007.txt", True)
     
                If recherche Then
                    sw.Write(";")
                    sw.Write(Box_Code_PSV.Text)
                    sw.Write(";")
                    sw.Write(Box_Commune.Text)
                    sw.Write(";")
                    sw.Write(Box_Type_Installation.Text)
                    sw.Write(";")
                    sw.Write(Box_Payeur.Text)
                    sw.Write(";")
                    sw.Write(Box_Installation.Text)
                    sw.Write(";")
                    sw.Write(Box_Nom_PSV.Text)
                    sw.Write(";")
                    sw.Write(Box_Lieu_PSV.Text)
                    sw.Write(";")
                    sw.Write(Box_Type_Eau.Text)
                    sw.Write(";")
                    sw.Write(Box_Responsable.Text)
                    sw.Write(";")
     
                    If CheckBox_Eau.Checked = True Then
                        sw.Write("oui")
                        sw.Write(";")
                    Else
                        sw.Write("non")
                        sw.Write(";")
                    End If
     
                    If CheckBox_Option.Checked = True Then
                        sw.Write("oui")
                        sw.Write(";")
                    Else
                        sw.Write("non")
                        sw.WriteLine(";")
                    End If
                    MsgBox("PSV ajouté")
                    AIP.Show()
                End If
                sw.Close()
            End If
        End Sub

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    Oui j'ai cela maintenant. ET CA MARCHE !! merci... (encore une fois tu reponds plus vite que j'ai le temps de me rendre compte de mon erreur )

    En fait mon code est pas très clair je pense (et moi par la même ocasion). Car quand en pratique j'écris rien dans mon fichier, en théorie je l'ouvre en écriture quand même... Et c'est pour cela que ta solution est bonne... (je pensais qu'elle le serait pas car meme si j'écrivais rien j'avais le problème)
    Et j'ai osé douté

    Ptet tu comprends mieux maintenant (ou pas )

  15. #15
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Ce qui serait encore mieux, c'est de mettre la déclaration de ton StreamWriter après "If Recherche Then". Comme ça tu n'ouvres ton fichier que lorsque cela est nécessaire. Et tu peux alors remettre le "sw.Close()" là où il se trouvait.

    Content d'avoir pu être utile.

    Griftou.

  16. #16
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par griftou Voir le message
    Ce qui serait encore mieux, c'est de mettre la déclaration de ton StreamWriter après "If Recherche Then". Comme ça tu n'ouvres ton fichier que lorsque cela est nécessaire. Et tu peux alors remettre le "sw.Close()" là où il se trouvait.

    Content d'avoir pu être utile.

    Griftou.
    C'est exact... et c'est encore mieux merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2008, 23h09
  2. ouverture d'un fichier deux fois en meme temps
    Par mm2405 dans le forum C++
    Réponses: 1
    Dernier message: 11/10/2007, 17h54
  3. Problème d'ouverture de fichier (une fois oui, une fois non)
    Par yadla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2007, 08h54
  4. Button OnClick s'execute deux fois de suite
    Par ToxiZz dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/06/2007, 08h59
  5. [VB.net 2003] ouverture de fichier
    Par froulet dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/07/2006, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo