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 :

Problème avec mon code (Fichier ini)


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut Problème avec mon code (Fichier ini)
    Bonjour,

    dans mon application Winform j'avais fait le code
    du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Function LitDansFichierIni(ByVal Section As String, ByVal Cle As String, ByVal Fichier As String, _
        Optional ByVal ValeurParDefaut As String = "") As String
     
            Dim strReturn As String
            strReturn = String(255, 0)
            GetPrivateProfileString(Section, Cle, ValeurParDefaut, strReturn, Len(strReturn), Fichier)
            LitDansFichierIni = Left(strReturn, InStr(strReturn, Chr(0)) - 1)
     
        End Function
    avec mes infos perso pour le programme mais depuis ce matin
    il ne marche plus j'ai 3 erreurs que je ne sait pas resoudre

    Erreur 1
    'String' est un type classe et ne peut pas être utilisé en tant qu'expression.

    Erreur 2
    '.' attendu. (Celui ci c'est l'erreur sur String(255, 0)

    Erreur 3
    'Public Property Left() As Integer' n'a aucun paramètre et son type de retour ne peut pas être indexé.

    Pouvez vous m'aider s'il vous plait ?

    Merci
    Cordialement,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Toi tu viens de VB6 non ?
    En VB.NET, String est une classe qui représente une chaine immuable. Donc déjà, pour utiliser GetPrivateProfileString, tu ne peux pas lui passer une chaine parce que GetPrivateProfileString va tenter d'écrire dedans. Donc il faut lui passer un StringBuilder et non une chaine. Ensuite tu peux convertir StringBuilder en chaine avec la méthode ToString

    Il faut aussi changer la déclaration de GetPrivateProfileString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         <DllImport("kernel32.dll", SetLastError:=True)> _
        Private Shared Function GetPrivateProfileString(ByVal lpAppName As String, _
                                ByVal lpKeyName As String, _
                                ByVal lpDefault As String, _
                                ByVal lpReturnedString As StringBuilder, _
                                ByVal nSize As Integer, _
                                ByVal lpFileName As String) As Integer
        End Function
    Pour récupérer une partie de la chaine, on utilise la méthode Substring, et non Left (dans ton code Left fait probablement référence à la position horizontale de ta fenêtre). Et à la place de InStr, on utilise la méthode IndexOf.

    Au final, tu devrais avoir quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Function LitDansFichierIni(ByVal Section As String, ByVal Cle As String, ByVal Fichier As String, _
        Optional ByVal ValeurParDefaut As String = "") As String
     
            Bim sb As New StringBuilder
            GetPrivateProfileString(Section, Cle, ValeurParDefaut, sb, Len(strReturn), Fichier)
            Dim strReturn As String = sb.ToString()
            LitDansFichierIni = strReturn.Substring(0, strReturn.IndexOf(Chr(0)) - 1)
        End Function
    Je te conseille de lire un tutoriel sur VB.NET, il y a pas mal de différences avec VB6... il y en a un ici :
    http://plasserre.developpez.com/vsommair.htm

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    J'avais déjà posté un code complet pour lire une ligne d'un fichier ini ...
    Bon, je l'ai pas retrouvé (le post) mais le voilà (le code) :
    Code vb : 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
     
    <Runtime.InteropServices.DllImport("kernel32.dll")> _
        Shared Function GetPrivateProfileString(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As StringBuilder, ByVal nSize As UInteger, ByVal lpFileName As String) As UInteger
     
        End Function
     
     
     
        Public Function LireLigneIni(ByVal fichier As String, ByVal entrée As String, ByVal clef As String) As String
     
            Dim bi As New StringBuilder(16)
     
            Dim size As UInteger = 0
     
            While True
     
                size = GetPrivateProfileString(entrée, clef, "", bi, (CType(bi.Capacity, UInteger)), fichier)
     
                If size = bi.Capacity - 1 Then
     
                    bi.Capacity *= 2
     
                Else
     
                    Return bi.ToString()
     
                End If
     
            End While
     
            Return Nothing
     
        End Function


    Edit :
    Petit détail à tomlev

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Bim sb As New StringBuilder
            GetPrivateProfileString(Section, Cle, ValeurParDefaut, sb, Len(strReturn), Fichier)
            Dim strReturn As String = sb.ToString()
            LitDansFichierIni = strReturn.Substring(0, strReturn.IndexOf(Chr(0)) - 1)
    A mon avis ça va être compliqué d'utiliser Len(strReturn) avant d'avoir crée l'objet strReturn (à la ligne suivante)

  4. #4
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    Salut,

    Non je suis en VB 2005 je fait des programmes avec les deux
    car mes autres programmes marche pas avec vb6

    voici le code d'origine du forum ici

    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
     
        Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
        Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
     
     
        Private Function EcritDansFichierIni(ByVal Section As String, ByVal Cle As String, _
        ByVal Valeur As String, ByVal Fichier As String) As Long
            EcritDansFichierIni = WritePrivateProfileString(Section, Cle, Valeur, Fichier)
        End Function
     
     
        Private Function LitDansFichierIni(ByVal Section As String, ByVal Cle As String, ByVal Fichier As String, _
        Optional ByVal ValeurParDefaut As String = "") As String
     
            Dim strReturn As String
            strReturn = String(255, 0)
            GetPrivateProfileString(Section, Cle, ValeurParDefaut, strReturn, Len(strReturn), Fichier)
            LitDansFichierIni = Left(strReturn, InStr(strReturn, Chr(0)) - 1)
     
        End Function
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            EcritDansFichierIni("CONFIG", "couleur", "336699", "c:\config.ini")
        End Sub
    je l'ai pris ya longtemps et depuis ce matin depuis ma derniere mise a jour du programme ca ne marche plus

    si tu as une petite idée

    Merci
    Cordialement,

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    T'as vu mon message ?

  6. #6
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    Désolé
    j'ai fait le message en meme temps que toi je pense
    j'ai pas actualisé la page pour voir.

    je vais essayer Merci

    Cordialement,

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par smyley Voir le message
    Edit :
    Petit détail à tomlev

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Bim sb As New StringBuilder
            GetPrivateProfileString(Section, Cle, ValeurParDefaut, sb, Len(strReturn), Fichier)
            Dim strReturn As String = sb.ToString()
            LitDansFichierIni = strReturn.Substring(0, strReturn.IndexOf(Chr(0)) - 1)
    A mon avis ça va être compliqué d'utiliser Len(strReturn) avant d'avoir crée l'objet strReturn (à la ligne suivante)
    Arf... voilà ce que c'est quand on copie colle sans faire attention

  8. #8
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    Vous etes sur que c'est pour Visual basic 2005 ?
    je met le code dans un nouveau appli en VB5 et ca marche pas

    vraiment desolé mais j'ai beaucoup de mal a comprendre meme avec le Tuto sur http://access.developpez.com/faq/?page=ActionsRep#ini

    en VB5 ca ne marche pas

    a cause du strReturn = String(255, 0)

    Autre idée ?

    Merci
    Cordialement,

  9. #9
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    A tout hasard, VB5 != VB 2005 ... enfin je dit ça ... c'est une impression ...

  10. #10
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    tout re marche a present :p
    mais j'ai un seul probleme

    avec le codes suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'EcritDansFichierIni("Affichage", "Left", MaskedTextBox1.Text, "d:\config.ini")
            MaskedTextBox1.Text = LitDansFichierIni("Affichage", "Left", "d:\config.ini")
        End Sub
    EcritDansFichierIni Marche tres bien mes text s'enregistre dans mon fichier ini mais l'autre non => LitDansFichierIni ca ne veut pas mettre mon info dans ma textBox1

    pourtant je fait bien
    MaskedTextBox1.Text = LitDansFichierIni("Affichage", "Left", "d:\config.ini")

    La fonction pour lire dans le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Function LitDansFichierIni(ByVal Section As String, ByVal Cle As String, ByVal Fichier As String, _
        Optional ByVal ValeurParDefaut As String = "") As String
     
            Dim strReturn As String
            strReturn = Strings.Left$(255, 2)
            GetPrivateProfileString(Section, Cle, ValeurParDefaut, strReturn, Len(strReturn), Fichier)
            LitDansFichierIni = Strings.Left$(strReturn, InStr(strReturn, Chr(0)) - 1)
     
        End Function
    mais toujours rien savez vous pourquoi ?

    Merci
    Cordialement,

  11. #11
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    J'ai enfin corrigé mes erreurs mais une autre arrive a la suite
    et je ne sait pas comment le resoudre

    pourvez vous m'aider s'il vous plait ?

    Erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Avertissement    1    La fonction 'LireINI' ne retourne pas une valeur pour tous les chemins de code. Une exception de référence null peut se produire au moment de l'exécution lorsque le résultat est utilisé.
    le "End Function" et souligné en vert et ca dit le message du haut.

    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
     
        Function LireINI(ByVal pEntete As String, ByVal pVariable As String) As String
            Dim l_szRetour As String
            Dim l_lRetour As Long
            Dim l_szFichier As String
            l_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\"c)) & "\config.ini"
            If Dir(l_szFichier) = "" Then
                MsgBox("Fichier introuvable")
            Else
                l_szRetour = Space$(255)
                l_lRetour = GetPrivateProfileString(pEntete, pVariable, "Error", l_szRetour, 255, l_szFichier)
                LireINI = Strings.Left$(l_szRetour, l_lRetour)
            End If
        End Function
    Merci
    Cordialement,

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par kazylax
    le "End Function" et souligné en vert et ca dit le message du haut.
    Parce que dans le If (là où tu affiches une messagebox) la fonction ne renvoie aucune valeur. Elle doit forcément renvoyer une valeur ou lever une exception. De toutes façons c'est un avertissement, pas une erreur, donc ça ne doit pas empêcher le programme de se compiler
    Il marche l'appel à GetPrivateProfileString ? parce qu'apparemment tu n'as pas tenu compte de ce que je t'avais dit sur le StringBuilder...

  13. #13
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Encore une remarque juste comme ça.
    Si pour x raison la chaine à lire fais plus de 255 caractères vos fonctions échouerons ...
    Je repars ...

  14. #14
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    oui le GetPrivateProfileString marche tres bien
    et le 255 je peux pas faire autrement car si je met moins ca marche pas

    Merci

  15. #15
    Membre régulier Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Points : 121
    Points
    121
    Par défaut
    mes variables du genre

    [CONFIG]
    nombre=30
    total=5

    va bien dans ma config ca bloque en faite au load du Form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                MaskedTextBox1.Text = LireINI("CONFIG", "nombre")
                MaskedTextBox2.Text = LireINI("CONFIG", "total")
        End Sub
    ca me dit toujours

    System.OverflowException: L'opération arithmétique a provoqué un dépassement de capacité.

    Ligne 19

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            l_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\"c)) & "\config.ini"
    je comprend pas pourquoi je depasse pas la limite

  16. #16
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par kazylax Voir le message
    oui le GetPrivateProfileString marche tres bien
    et le 255 je peux pas faire autrement car si je met moins ca marche pas
    Nan mais je sais pas, je met un code qui marche à tout les coups et même avec les histoires de buffers à agrandir automatiquement, et pi personne ne l'essaye ... m'enfin bon courage

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    De toutes façons je ne vois pas l'intérêt d'utiliser la fonction GetPrivateProfileString, lire un fichier ini c'est quand même pas bien compliqué...
    Voir le code que j'avais posté ici :
    http://www.developpez.net/forums/sho....php?p=3226450

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

Discussions similaires

  1. [JDOM] problème avec mon code
    Par aroua dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 30/04/2008, 13h36
  2. problème avec mon code pour accès au serveur ftp
    Par mimi51340 dans le forum Général Java
    Réponses: 1
    Dernier message: 03/03/2008, 23h24
  3. Problème avec mon code - un aperçu
    Par nsimon70 dans le forum Flash
    Réponses: 1
    Dernier message: 14/02/2008, 12h47
  4. [MySQL] problème avec mon code (envoi données) ?
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/12/2007, 09h45
  5. probléme avec mon code JAVA et MYSQL
    Par ulysse031 dans le forum JDBC
    Réponses: 5
    Dernier message: 10/05/2007, 00h46

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