Problème lecture .INI avec VB.net [Résolu]

Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
- - Dernière réponse : jon51
Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
- 31 juil. 2008 à 07:59
bonjour,
j'ai un problèmeavec un petit bout de code qui sert à lire et crire dans un fichier .INI pour écrire je n'ai aucun problème par contre pour la parite de lecture j'ai un avertissement voici le code:

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
Stringl_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf(""c)) &

"\config.ini"

If Dir(l_szFichier) =
""
ThenMsgBox(

"Fichier introuvable")

Elsel_szRetour = Space$(255)

l_lRetour = GetPrivateProfileString(pEntete, pVariable,

"Error", l_szRetour, 255, l_szFichier)LireINI = Strings.Left$(l_szRetour, l_lRetour)

End
If

End
Functionend function est souligné en vert l'avertissemnt est le suivant:
la fonction "lireINI"ne retourne pas une valeur pour tous les chemin de code.une ecception de reference null peut se produire au moment de l'execution lorsque le résultat est utilisé.

auriez vous une idée.
merci
jon51
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
3
Merci
Pas de quoi... mais pense à "réponse accepté"

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 222 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Kevin.Ory
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
0
Merci
1 pourquoi utiliser les fichiers ini en vb.net???

utilises My.Settings  c'est mieux

2 c'est normal que tu aies un warning puisque en effet ta fonction ne retourne rien apres le End if (je sais c'est ridicule)

voici la façon de faire

Function LireINI(
ByVal pEntete
As
String,
ByVal pVariable
As
String)
As
String

Dim l_szRetour
As
String

Dim str
As
String =
String.Empty

Dim l_lRetour
As
Long

Dim l_szFichier
As
Stringl_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf(""c)) &

"\config.ini"

If Dir(l_szFichier) =
""
ThenMsgBox(

"Fichier introuvable")

Elsel_szRetour = Space$(255)

l_lRetour = GetPrivateProfileString(pEntete, pVariable,

"Error", l_szRetour, 255, l_szFichier)str = Strings.Left$(l_szRetour, l_lRetour)

 

End
If

Return str

End
Function

Il y a (4.5 \ 1.5) sortes de gens, ceux qui comprennent le vb et les autres ,je fais partie des autres/FONT>
Commenter la réponse de gillardg
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
Salut,

En fait il fait un LireINI = Strings.Left$(l_szRetour, l_lRetour), ce qui est plus ou moins la même chose que Return
Strings.Left$(l_szRetour, l_lRetour). Par contre, il manque un
LireINI = "" après le 
MsgBox("Fichier introuvable"
)
Mais la solution de Gillard va aussi, puisque il retourne la valeur après le If / End If quel que soit la valeur attribué...

Mais ce code me semble un peu compliqué (faut dire que cette colorisation de code fait un #@¬§°# de formatage du texte).
Voilà comment je ferais:

Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (lpApplicationName As String, lpKeyName As String, lpDefault As String, lpReturnedBuffer As String, nSize As Integer, lpFileName As String) As Integer

Public Function GetCle(File As String, Section As String, Key As String, Optional DefaultValue As String = "") As String
    Dim Ret As New String(vbNullChar, 1024)
    Dim Lng As String = GetPrivateProfileString(Section, Key, DefaultValue, Ret, 1024, File)
    Return Ret.Substring(0, Lng)
End Function
Commenter la réponse de Kevin.Ory
Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
0
Merci
re bonjour,
tout d'abord merci pour vos reponse.

j'ai essayé avec return str mais il m'ajoute de suite des parenthèse derrière et me le souligne en vert.
voici l'erreur:
argument non spécifié pour le parametre 'number' de 'public function str(number as object)as string'

voila si vous avez une idée??

merci
jon51
Commenter la réponse de jon51
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
C'est parce que str est le nom d'une fonction. Change le nom de cette variable et ça devrait passer...

Et sinon, pourquoi ne pas utiliser mon exemple? (c'est plus simple non?)
        Dim Ret As New String(vbNullChar, 1024)
        Dim Lng As String = GetPrivateProfileString(Section, Key, DefaultValue, Ret, 1024, File)
        Return Ret.Substring(0, Lng)
Je ne fais pas le test pour savoir si le fichier existe, mais ce genre de chose doit se faire une fois au démarrage de l'appli et pas à chaque fois que l'on accède à une valeur du fichier. De cette façon:
    Dim File As String = Application.StartupPath & "\config.ini"
    If Not IO.File.Exists(File) Then     

        MsgBox("Fichier introuvable"
)
    End If

Ou sinon, fais comme je l'ai dis, tu change rien à ce que tu fesais avant (LireINI = Strings.Left$(l_szRetour, l_lRetour)
) mais tu rajoute un LireINI = "" juste après ton MsgBox("Fichier introuvable"
)
Commenter la réponse de Kevin.Ory
Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
0
Merci
je n'ai pas très bien compri  ta solution pourrai tu me l'expliquer.
merci

jon51
Commenter la réponse de jon51
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
Tout d'abord tu déclare l'API et une fonction qui utilise cette API pour récupérer une valeur:

' Déclaration de l'API

Private
Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias
"GetPrivateProfileStringA" (lpApplicationName As String, lpKeyName As
String, lpDefault As String, lpReturnedBuffer As String, nSize As
Integer, lpFileName As String) As Integer







' Fonction qui permet de récupérer une valeur d'une fichier INI.
' File = Le nom du fichier
' Section = Le nom de la section
' Key = Le nom de la clé pour laquelle récupérer la valeur
' DefaultValue = Valeur à retourner lorsque la clé n'existe pas
Public Function GetCle(File As String, Section As String, Key As String, Optional DefaultValue As String = "") As String
    ' Créer un buffer (un string) pour récupérer la valeur
    Dim Ret As New String(vbNullChar, 1024)
    ' Appel de l'API pour lire le fichier et récupérer la valeur
    Dim Lng As String = GetPrivateProfileString(Section, Key, DefaultValue, Ret, 1024, File)
    ' Formater le résultat (enlever les espaces en trop)
    Return Ret.Substring(0, Lng)
End Function









Dans ton Form_Load par exemple, tu test si le fichier INI existe :
' Chemin du fichier :








Dim File As String = Application.StartupPath & "





\config.ini"
' Si le fichier n'existe pas....
If Not IO.File.Exists(File) Then     
    ' ... afficher un message d'avertissement



   
MsgBox(

"Fichier introuvable"


)
    [code en plus]      
End If
A toi de voir ce que tu fais lorsque le fichier n'existe pas (soit fermer le prog, créer le fichier, etc)

Ensuite, tu appel la fonction


GetCle



pour récupérer une valeur :






' Chemin du fichier :










Dim File As String = Application.StartupPath & "





\config.ini"
' Récupérer la valeur
Dim Value As String =




GetCle(File, "Section", "Clé", "")
Commenter la réponse de Kevin.Ory
Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
0
Merci
re bonjour,
tout d'abord merci.
j'ai essayé votre solution je n'ai plus d'erreur mais il ne me retourne pas de valeur. j'ai testé en fesant un msgbox mais il me retourne une valeur null c'est à dire rien.

voici le code:
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Chemin du fichier :
Dim File AsString = Application.StartupPath & " \config.ini"
' Récupérer la valeur
Dim Value AsString = LireINI(File, "IPborne", "de")
MsgBox(Value)
EndSub

j'ai vérifié dans config.INI et il m'écrit bien les valeur que je lui dit donc je ne sais pas ce qui se passe.
auriez-vous une idée.

merci
jon51
Commenter la réponse de jon51
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
Tu as mis un espace avant le \config.ini, supprime le... (" \config.ini")
Commenter la réponse de Kevin.Ory
Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
0
Merci
merci beucoup tu ma vraiment aidé.

a bientot
jon51
Commenter la réponse de jon51
Messages postés
35
Date d'inscription
mercredi 10 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2008
0
Merci
ouops désolé.
a bientot

jon51
Commenter la réponse de jon51