Fichier .ini et visual basic 2008 [Résolu]

Messages postés
25
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
14 décembre 2008
- - Dernière réponse : MicDundee
Messages postés
375
Date d'inscription
mardi 1 juillet 2003
Dernière intervention
5 juin 2018
- 24 juil. 2010 à 14:18
Bonjour^^
Voila j'aimerai parametrer mon application avec un fichier .ini, j'ai cherché sur le net quelques tutos et j'ai trouvé une fonction qui utilise une API, mais certaine partie du code ne sont pas compatible avec VB2008, donc si quelqu'un pouvais m'aider a mettre à jour ceci...

Voila le code (je met en rouge les parties qui ne fonctionne pas sous vb2008) >
// Declaration API pour lire le fichier ini
Private Declare
Function
GetPrivateProfileString Lib
"
kernel32
"
Alias
"
GetPrivateProfileStringA
"
_
    (
ByVal
lpApplicationName
As
String
,
ByVal
lpKeyName
As
Any,
ByVal
lpDefault
As
String
, _
   
ByVal
lpReturnedString
As
String
,
ByVal
nSize
As
Long,
ByVal
lpFileName
As
String
)
As
Long
// Declaration API pour ecrire le fichier ini
Private
Declare
Function
WritePrivateProfileString Lib
"
kernel32
"
Alias
"
WritePrivateProfileStringA
"
_
    (
ByVal
lpApplicationName
As
String
,
ByVal
lpKeyName
As
Any,
ByVal
lpString
As
Any, _
   
ByVal
lpFileName
As
String
)
As
Long
// Fonction pour lire le fichier ini
Private
Function
LitDansFichierIni
(Section
 As 
String
, Cle
 As 
String
, Fichier
 As 
String
, _    Optional 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

// Fonction pour ecrire le fichier ini
Private
Function
EcritDansFichierIni
(Section
As
String
, Cle
As
String
, _
   Valeur
As
String
, Fichier
As
String
)
As
Long
EcritDansFichierIni
=
WritePrivateProfileString
(Section, Cle, Valeur, Fichier)
End
Function


Voila, merci...
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
bon c'est vraiment pour essayer hein....

(désolé pour la couleur)
dans une class nommée Cls_Ini, copie ce code :

 Public Class Cls_Ini

    'Declaration API pour lire le fichier ini
    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 Integer, _
         ByVal lpFileName As String) As Integer

    'Declaration API pour ecrire le fichier ini
    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 Integer

    'chemin du fichier INI
    Public Path As String

    'fonction qui retourne la chaine selon la '[SECTION]' et la 'CLE='
    Public Function GetValue(ByVal sSection As String, ByVal sKey As String) As String
        'buffer
        Dim Buffer As New System.Text.StringBuilder(255)
        Buffer.Append(" ", 255)
        Dim sRet As String = Buffer.ToString
        Buffer.Length = 0

        'retour API
        Dim iRet As Integer = GetPrivateProfileString(sSection, sKey, "", sRet, sRet.Length, Me.Path)

        'retour fonction
        Return sRet.Substring(0, iRet)
    End Function

    'procédure qui va écrire la valeur à la '[SECTION]' et la 'CLE=' voulues
    Public Sub SetValue(ByVal sSection As String, ByVal sKey As String, ByVal sValue As String)
        WritePrivateProfileString(sSection, sKey, sValue, Me.Path)
    End Sub

End Class

et dans une form par exemple :

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim INI As New Cls_Ini
        INI.Path = "C:\test.ini"
        MessageBox.Show(INI.GetValue("SEC", "KEY"))
        INI.SetValue("SEC", "KEY", "test")
    End Sub

la création du buffer est fonctionnelle, maintenant aucune garantie que çà soit la meilleure manière...
si un DotNetien passe par là...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Merci PCPT 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Salut
En VB.Net, les types de variable ont changées et les définitions que tu utilises sont dédiées à VB6 :
   VB6      .Net
   Long      Integer
   Integer   Short

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
25
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
14 décembre 2008
0
Merci
Merci pour cette info, et pour les fonctions left() et String() aurais tu une idée ? car elle ne fonctionne pas non plus...
Commenter la réponse de Beuz13
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
salut,
string() -> utiliser un StringBuilder
left -> çà doit être IndexOf(..)
any -> string ou object

jète un oeil dans les snippets de www.codyx.org dans la catégorie CHAINES et API, tu devrais trouver de quoi faire ;)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
25
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
14 décembre 2008
0
Merci
Sa marche, un trés grand merçi à vous^^
Commenter la réponse de Beuz13
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
même si je ne fais pas de DotNet, ma curiosité l'a emporté...

j'avais parlé de déclaré le ANY en OBJECT..., on était pas si loin,
après demande de confirmation (merci Kenji), il est possible de déclarer l'API :

    'Declaration API pour lire le fichier ini
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String, _
         ByVal lpKeyName As String, _
         ByVal lpDefault As String, _
         ByVal lpReturnedString As System.Text.StringBuilder, _
         ByVal nSize As Integer, _
         ByVal lpFileName As String) As Integer

ce qui nous fait alors gagner quelques lignes pour GetValue :

'fonction qui retourne la chaine selon la '[SECTION]' et la 'CLE='
   Public Function GetValue(ByVal sSection As String, ByVal sKey As String) As String
        'buffer
        Dim Buffer As New System.Text.StringBuilder(255)

        'appel API
        Call GetPrivateProfileString(sSection, sKey, "", Buffer, Buffer.Capacity, Me.Path)

        'retour fonction
        Return Buffer.ToString()
        Buffer.Length = 0
    End Function

++ ;)
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Dernière intervention
7 janvier 2009
0
Merci
Salut,

Juste en passant, pourquoi utiliser un fichier ini? Il n'y a pas de classe pour gérer les ini dans le framework, ce n'est pas pour rien, c'est parce que aujourd'hui on fait tout avec du xml. Et pour gérer les xml, il y a tout ce qu'il faut das le framework
Commenter la réponse de Kevin.Ory
Messages postés
375
Date d'inscription
mardi 1 juillet 2003
Dernière intervention
5 juin 2018
0
Merci
Super ça marche bien mais commenet supprimer une clé voire une section entière ? Seule solution là : devoir tout réécrire.
Commenter la réponse de MicDundee
Messages postés
375
Date d'inscription
mardi 1 juillet 2003
Dernière intervention
5 juin 2018
0
Merci
Bon, j'ai trouvé pour supprimer une clé mais pour une section entière, ça ne marche pas.

    Public Sub DeleteKey(ByVal sSection As String, ByVal sKey As String)
        'Supprime la 'CLE=' dans la '[SECTION]'.
        WritePrivateProfileString(sSection, sKey, vbNullString, Me.PathINI)
    End Sub


J'ai tenté pour supprimer la section :
    Public Sub DeleteSection(ByVal sSection As String)
        'Supprime la '[SECTION]'.
        WritePrivateProfileString(sSection, vbNullString, vbNullString, Me.PathINI)
    End Sub


Marche pas !
Commenter la réponse de MicDundee
Messages postés
375
Date d'inscription
mardi 1 juillet 2003
Dernière intervention
5 juin 2018
0
Merci
Si ça marche ! Je suis con
J'avais fait une faute dans le nom de ma section. J'utilise "Me.PathINI" alors que dans l'exemple c'est "Me.Path" pour le chemin du fichier. C'est cool toutes les fonctions sont là pour traiter les fichiers INI.
Commenter la réponse de MicDundee

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.