Fichier .ini et visual basic 2008

Résolu
Beuz13 Messages postés 25 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 14 décembre 2008 - 2 juin 2008 à 01:27
 Utilisateur anonyme - 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...

10 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 juin 2008 à 03:49
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
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 juin 2008 à 01:51
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)
0
Beuz13 Messages postés 25 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 14 décembre 2008
2 juin 2008 à 02:14
Merci pour cette info, et pour les fonctions left() et String() aurais tu une idée ? car elle ne fonctionne pas non plus...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 juin 2008 à 02:25
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
0

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

Posez votre question
Beuz13 Messages postés 25 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 14 décembre 2008
2 juin 2008 à 08:11
Sa marche, un trés grand merçi à vous^^
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 juin 2008 à 13:52
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
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
2 juin 2008 à 16:34
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
0
Utilisateur anonyme
24 juil. 2010 à 13:30
Super ça marche bien mais commenet supprimer une clé voire une section entière ? Seule solution là : devoir tout réécrire.
0
Utilisateur anonyme
24 juil. 2010 à 14:14
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 !
0
Utilisateur anonyme
24 juil. 2010 à 14:18
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.
0
Rejoignez-nous