Problème lecture .INI avec VB.net

Résolu
jon51 Messages postés 35 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 juillet 2008 - 28 juil. 2008 à 16:37
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

11 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
30 juil. 2008 à 17:27
Pas de quoi... mais pense à "réponse accepté"
3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
28 juil. 2008 à 18:05
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>
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
28 juil. 2008 à 20:06
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
0
jon51 Messages postés 35 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 juillet 2008
29 juil. 2008 à 08:20
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
29 juil. 2008 à 11:35
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"
)
0
jon51 Messages postés 35 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 juillet 2008
29 juil. 2008 à 13:35
je n'ai pas très bien compri  ta solution pourrai tu me l'expliquer.
merci

jon51
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
29 juil. 2008 à 18:47
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é", "")
0
jon51 Messages postés 35 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 juillet 2008
30 juil. 2008 à 09:31
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
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
30 juil. 2008 à 15:50
Tu as mis un espace avant le \config.ini, supprime le... (" \config.ini")
0
jon51 Messages postés 35 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 juillet 2008
30 juil. 2008 à 16:03
merci beucoup tu ma vraiment aidé.

a bientot
jon51
0
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
ouops désolé.
a bientot

jon51
0
Rejoignez-nous