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

VB.NET Discussion :

Gros problème étonnant en programmation (ou je comprends pas bien comment ça marche!)


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Gros problème étonnant en programmation (ou je comprends pas bien comment ça marche!)
    Bonjour les amis

    Aujourd'hui, en programmation, j'ai un problème dont je ne sais résoudre !
    Je vous explique :
    > Je voudrais écrire dans un fichier avec StreamWriter (venant de System.IO)
    > Avec StreamWriter, je voudrais écrire le fichier dans un répertoire défini par une textbox[/CODE]. Je place le contenu dans une variable nommé WorkPath.
    > Le problème, c'est que je veux associer WorkPath avec une chaîne avec ce contenu : "\nomdefichier.txt".
    > J'ai essayé d'avoir un résultat avec un label et ça me donne ceci : \Users\<monnom>\Desktop\TEST PROG .
    > J'ai donc, recherché sur un moteur de recherche, j'ai trouvé la fonction Path.Combine(répertoire1, répertoire2...).
    > J'ai essayé, et toujours le même résultat, \Users\<monnom>\Desktop\TESTPROG. J'ai strictement rien compris .

    Ceux qui n'auront pas compris (ou faignat ), voici le code :
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Imports System.IO
     
    Public Class MaSuperFenetre
        Private Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click
            'ça marche pas D:
            My.Computer.FileSystem.DeleteFile(Path.Combine(Step1Config.SystemWorkTextbox.Text & "\nomdefichier.txt"))
            LabelOutput.Text = Step1Config.PathWork & "\nomdefichier.txt"
            Dim StreamWriterT = New System.IO.StreamWriter(Path.Combine(Step1Config.SystemWorkTextbox.Text & "\nomdefichier.txt"), False)
     
            StreamWriterT.Write("Saucisse 1" & vbCrLf & "Saucisse 2 " & "Saucisse inconnu 3" & vbCrLf & "Saucisse 4")
            StreamWriterT.Close()
        End Sub
    End Class
    C'est sur ce code que je comprends strictement rien .

    Si quelqu'un comprend le problème, merci infiniment .

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 56
    Points
    56
    Par défaut
    Je pense qu'il ne faut pas d'antislash avant "nomdefichier.txt" dans la fonction Combine.

    Un exemple ici:http://www.dotnetperls.com/path-vbnet

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    C'est sur ce code que je comprends strictement rien .
    Il faut reconnaître que c'est un peu le bazar ce code :
    - 3 fois le nom du fichiers défini en 5 lignes de code avec 2 façons différentes (un coup avec un textbox, un coup avec une variable)
    - L'utilisation de PathCombine est une bonne idée mais comme tu l'indiques sa syntaxe est : Path.Combine(répertoire1, répertoire2...) et non pas Path.Combine(répertoire1 & répertoire2...). De plus, inutile de préciser les '\' dans PathCombine.
    - Ou est affectée la variable Step1Config.PathWork ? Que contient-elle ?

    Un peu de rigueur :
    - Affecte le nom de fichier avec le chemin complet dans une variable une bonne fois pour toute (avec PathCombine) et utilise cette variable partout. Ca évitera d'avoir à corriger X lignes de codes pour une erreur de construction de nom.
    - Mets un point d'arrêt dans la proc et vois ce que donne la variable en question.
    - Corrige le bug

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour,

    Pourquoi ne pas faire tout simplement ceci ?:
    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
        Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
            TextBox1.ReadOnly = True
            Dim ChoixDossier As New FolderBrowserDialog
            ChoixDossier.ShowDialog()
            If ChoixDossier.SelectedPath <> "" Then
                TextBox1.Text = ChoixDossier.SelectedPath
            Else
                TextBox1.Text = ""
            End If
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If TextBox1.TextLength > 2 Then
                Dim Liste As New List(Of String)
                Liste.Add("Saucisse 1")
                Liste.Add("Saucisse 2")
                Liste.Add("Saucisse 3")
                Liste.Add("Saucissss")
                Liste.Add("Saucccc")
                System.IO.File.WriteAllLines(TextBox1.Text & "\nomdefichier.txt", Liste)
                MessageBox.Show("OK")
            Else
                MessageBox.Show("Veuillez entrer le chemin d'accès...")
            End If
        End Sub
    A+
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 49
    Points : 85
    Points
    85
    Par défaut
    Tu viendrais pas tu VB6 toi ?

    Alors dans l'ordre :
    - Déclarer une variable (directory par exemple) , récupérer le contenu de la TextBox dans cette variable
    - Déclarer une variable (filename par exemple), initialiser à nomdefichier.txt
    - Déclarer une variable (absoluteFilename par exemple) initialisé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.Combine(directory ,filename );
    La tu as le chemin absolu de ton fichier avec les bons Slash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     My.Computer.FileSystem.DeleteFile(absoluteFilename);
    Et si le fichier n'existe pas ! Le minimum est de tester son existence et de le supprimer que si il existe, sinon Exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My.Computer.FileSystem.FileExists(absoluteFilename );
    Si oui tu supprime si non tu ne fait rien.

    Maintenant tu peux écrire dedans mais plus besoin du deuxième argument du StreamWriter, car tu as déjà supprimé le fichier correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim StreamWriterT = New System.IO.StreamWriter(absoluteFilename )
    Petite précision
    - l'avantage de Path.Combine c'est qu'il est multi plate-forme (en gros il te met des \ sous windows et de / sous linux).
    - Attention au StreamWriter sans spécifié d'encodage , il utiliseras l'encodage par défaut de la plate-forme, windows-1252 sous windows, ci les fichiers circulent par différents systèmes d'exploitation cela risque de poser problème, en même temps pour 4 saucisses c'est rarement le cas
    - Les noms des variables locales , c'est mieux en minuscule cela évite de les confondes avec des classes.

    Bon code

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par champy Voir le message
    Tu viendrais pas tu VB6 toi ?
    Tu ne viendrais pas d'un C quelque chose toi ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.Combine(directory ,filename );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     My.Computer.FileSystem.DeleteFile(absoluteFilename);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My.Computer.FileSystem.FileExists(absoluteFilename );
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour tous vos réponses. Eh oui, je viens un peu du C et du VB6...
    Je m'en excuse pour le bazar, car j'ai essayé avec des variables, d'autres avec des textboxes, car j'essayais de fixer le bug !
    Merci pour tout encore, j'essaye tout ça et je vous répond dès que possible. Merci encore à tous ceux qui ont répondu !

    clementmarcotte, j'ai une chose à dire : Je le savais déja

    Citation Envoyé par champy Voir le message
    Tu viendrais pas tu VB6 toi ?

    Alors dans l'ordre :
    - Déclarer une variable (directory par exemple) , récupérer le contenu de la TextBox dans cette variable
    - Déclarer une variable (filename par exemple), initialiser à nomdefichier.txt
    - Déclarer une variable (absoluteFilename par exemple) initialisé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.Combine(directory ,filename );
    La tu as le chemin absolu de ton fichier avec les bons Slash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     My.Computer.FileSystem.DeleteFile(absoluteFilename);
    Et si le fichier n'existe pas ! Le minimum est de tester son existence et de le supprimer que si il existe, sinon Exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My.Computer.FileSystem.FileExists(absoluteFilename );
    Si oui tu supprime si non tu ne fait rien.

    Maintenant tu peux écrire dedans mais plus besoin du deuxième argument du StreamWriter, car tu as déjà supprimé le fichier correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim StreamWriterT = New System.IO.StreamWriter(absoluteFilename )
    Petite précision
    - l'avantage de Path.Combine c'est qu'il est multi plate-forme (en gros il te met des \ sous windows et de / sous linux).
    - Attention au StreamWriter sans spécifié d'encodage , il utiliseras l'encodage par défaut de la plate-forme, windows-1252 sous windows, ci les fichiers circulent par différents systèmes d'exploitation cela risque de poser problème, en même temps pour 4 saucisses c'est rarement le cas
    - Les noms des variables locales , c'est mieux en minuscule cela évite de les confondes avec des classes.

    Bon code
    Je peux te dire : C'est un code test pour un projet final que je dévoilerais quand il y aura le minimum de bugs corrigés ! Après, je savais déja que si il n'y avais pas de :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if My.Computer.FileSystem.FileExists(monfichier) then
     ' Mon code
    else
     ' Erreur
    end
    ça marcherait pas .

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    'MessageBox.Show("Veuillez entrer le chemin d'accès...")' : Tiens tiens ! C'est une première fois que je vois ça ! Merci de me l'avoir fait découvert !

    Citation Envoyé par ebastien Voir le message
    Bonjour,

    Il faut reconnaître que c'est un peu le bazar ce code :
    - 3 fois le nom du fichiers défini en 5 lignes de code avec 2 façons différentes (un coup avec un textbox, un coup avec une variable)
    - L'utilisation de PathCombine est une bonne idée mais comme tu l'indiques sa syntaxe est : Path.Combine(répertoire1, répertoire2...) et non pas Path.Combine(répertoire1 & répertoire2...). De plus, inutile de préciser les '\' dans PathCombine.
    - Ou est affectée la variable Step1Config.PathWork ? Que contient-elle ?

    Un peu de rigueur :
    - Affecte le nom de fichier avec le chemin complet dans une variable une bonne fois pour toute (avec PathCombine) et utilise cette variable partout. Ca évitera d'avoir à corriger X lignes de codes pour une erreur de construction de nom.
    - Mets un point d'arrêt dans la proc et vois ce que donne la variable en question.
    - Corrige le bug
    Ce 'bazar' est un test pour mon projet final comme je l'ai dis à quelqu'un d'autre !

    Citation Envoyé par champy Voir le message
    Tu viendrais pas tu VB6 toi ?

    Alors dans l'ordre :
    - Déclarer une variable (directory par exemple) , récupérer le contenu de la TextBox dans cette variable
    - Déclarer une variable (filename par exemple), initialiser à nomdefichier.txt
    - Déclarer une variable (absoluteFilename par exemple) initialisé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.Combine(directory ,filename );
    La tu as le chemin absolu de ton fichier avec les bons Slash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     My.Computer.FileSystem.DeleteFile(absoluteFilename);
    Et si le fichier n'existe pas ! Le minimum est de tester son existence et de le supprimer que si il existe, sinon Exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My.Computer.FileSystem.FileExists(absoluteFilename );
    Si oui tu supprime si non tu ne fait rien.

    Maintenant tu peux écrire dedans mais plus besoin du deuxième argument du StreamWriter, car tu as déjà supprimé le fichier correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim StreamWriterT = New System.IO.StreamWriter(absoluteFilename )
    Petite précision
    - l'avantage de Path.Combine c'est qu'il est multi plate-forme (en gros il te met des \ sous windows et de / sous linux).
    - Attention au StreamWriter sans spécifié d'encodage , il utiliseras l'encodage par défaut de la plate-forme, windows-1252 sous windows, ci les fichiers circulent par différents systèmes d'exploitation cela risque de poser problème, en même temps pour 4 saucisses c'est rarement le cas
    - Les noms des variables locales , c'est mieux en minuscule cela évite de les confondes avec des classes.

    Bon code
    Pourrais tu m'indiquer comment changer le système d'encodage dans StreamWriter ?

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par ProgrameurEnBatch Voir le message
    clementmarcotte, j'ai une chose à dire : Je le savais déja
    La question était pour Champy. Ä cause de ses ; au bout des ses instructions. Normalement, il aurait dû réagir. C'est tellement évident que je n'ai pas pu résister.

    P.S. VB.net n'a pas de décoration à la fin des instructions. Sauf que les versions anciennes obligent à utiliser le caractère de soulignement _ pour séparer les instructions qui tiennent sur plusieurs lignes, comme pour VB6 - VBA. À partir de VB 2013, je pense, il y a une option qui permet même d'éviter le caractère de soulignement.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Salut tout le monde,

    'MessageBox.Show("Veuillez entrer le chemin d'accès...")' : Tiens tiens ! C'est une première fois que je vois ça ! Merci de me l'avoir fait découvert !
    C'est un bon signe... ça veut dire que tu te familiarises avec le .net
    C'est dommage que tu n'as compris que cette partie du code...
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

Discussions similaires

  1. Problème de débutant, programme qui ne lance pas
    Par benjani13 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 15/02/2011, 19h17
  2. Je ne comprends pas bien drag drop scriptaculous
    Par nono95 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/05/2009, 16h39
  3. Problème de contrainte que je ne comprend pas
    Par trattos dans le forum Langage SQL
    Réponses: 0
    Dernier message: 15/07/2008, 11h28
  4. Réponses: 6
    Dernier message: 31/08/2007, 21h05
  5. Problème Hors Limite que je ne comprends pas
    Par Bleys dans le forum Delphi
    Réponses: 2
    Dernier message: 11/01/2007, 15h42

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