LECTURE D'UN INI FILE EN VB.NET

ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009 - 15 janv. 2003 à 18:33
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 4 oct. 2012 à 13:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5665-lecture-d-un-ini-file-en-vb-net

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
4 oct. 2012 à 13:34
fichier zip parfaitement valide pour moi
cs_janhsh Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 24 janvier 2015
4 oct. 2012 à 12:45
Le fichier ZIP est invalide
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
21 juil. 2011 à 22:28
Petite erreur detectée :
Public Function ReadByteArray(ByVal Section As String, ByVal Key As String, ByVal Length As Integer) As Byte()
If Length > 0 Then
Try
Dim Buffer(Length - 1) As Byte
If GetPrivateProfileStruct(Section, Key, Buffer, Buffer.Length, Filename) = 0 Then
Return Nothing
Else
Return Buffer
End If
Catch
Return Nothing
End Try Else '<cette partie n'existait pas et donc rien n'etait retourné si length0
Return Nothing
End If
End Function
circular Messages postés 17 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 27 mars 2010
20 oct. 2009 à 19:35
J'ai trouvé un bug dans la fonction GetSectionNames, et j'ai recopié ce bug dans la fonction GetSection. Il faut remplacer

BuffStr.Substring(PrevPos + 1, Length - PrevPos)

par

BuffStr.Substring(PrevPos + 1, Length - PrevPos - 1)

dans les deux fonctions, sinon il y a un caractère zéro inclus à la fin de la chaine de caractère.
circular Messages postés 17 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 27 mars 2010
18 oct. 2009 à 19:19
Il faut aussi rajouter la référence à la fonction GetPrivateProfileSection, comme ceci :

<DllImport("KERNEL32.DLL", EntryPoint:="GetPrivateProfileSectionA", SetLastError:=False, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function GetPrivateProfileSection(ByVal lpAppName As String, ByVal lpReturnedString As Byte(), ByVal nSize As Integer, ByVal lpFileName As String) As Integer
End Function
circular Messages postés 17 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 27 mars 2010
18 oct. 2009 à 19:18
Il manque une fonction pour lire une section entière... que voilà. Cela permet notamment de récupérer la liste des clés.

''' <summary>Retrieves a dictionary of an entire section in the INI file.</summary>
''' <returns>Returns a Dictionary with all available keys.</returns>
Public Function GetSection(ByVal SectionName As String) As Dictionary(Of String, String)
GetSection = New Dictionary(Of String, String)
Dim Buffer(MAX_ENTRY) As Byte
Dim BuffStr As String
Dim PrevPos As Integer = 0
Dim Length As Integer
Try
Length = GetPrivateProfileSection(SectionName, Buffer, MAX_ENTRY, Filename)
Catch
Exit Function
End Try
If Length > 0 Then
BuffStr = System.Text.Encoding.Default.GetString(Buffer)
Length = 0
PrevPos = -1
Do
Length = BuffStr.IndexOf(ControlChars.NullChar, PrevPos + 1)
If Length - PrevPos 1 OrElse Length -1 Then Exit Do
Dim Entry As String = BuffStr.Substring(PrevPos + 1, Length - PrevPos)
Dim PosEquals As Integer = Entry.IndexOf("="c)
If PosEquals = -1 Then
GetSection.Add(Entry, "")
Else
GetSection.Add(Entry.Substring(0, PosEquals), Entry.Substring(PosEquals + 1))
End If
PrevPos = Length
Loop
End If
End Function
pouda Messages postés 264 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 27 octobre 2014
8 juin 2008 à 07:36
La source a été créée en 2003, ce qui explique certainement le fait de l'utilisation de l'extension INI.
Il est clair qu'à l'heure actuelle, la source est devenue obsolète, tous fichiers INI devant être, à mon humble avis, remplacer par un fichier XML.

je ne suis pas tout a fait d'accord..car le fichier ini est nettement plus simple a editer en worpad pour des utilisateurs novice...apres effectivement le Xml reste le plus performant
pokeswell Messages postés 5 Date d'inscription mercredi 29 mars 2006 Statut Membre Dernière intervention 11 janvier 2008
11 janv. 2008 à 05:39
Merci beaucoup, vous venez de me sauver des heures!
cs_M51 Messages postés 63 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 10 août 2007
6 mars 2007 à 17:10
Merci pour ce code.
Pour rebondir, sur le commentaire de Bidou. Je dirais que le fichier XML config généré par VB.net est simple à créer et à utiliser dans la source mais à mon sens pas simple pour une personne extérieur: le code des paramétres est mélangé avec d'autres infos, et je ne crois pas qu'il soit possible de rajouter des commentaires sur les paramètres (ce que permet le fichier ini).
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
14 nov. 2006 à 20:50
La source a été créée en 2003, ce qui explique certainement le fait de l'utilisation de l'extension INI.
Il est clair qu'à l'heure actuelle, la source est devenue obsolète, tous fichiers INI devant être, à mon humble avis, remplacer par un fichier XML.
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 nov. 2006 à 19:24
A mon tour de récupérer cette source par pure feignantise.

Avant de me lancer dans la récupération des api, j'ai voulue voir si rien n'avait été implanté dans .net.

Et je suis arrivé ici. Pratique quand la msdn pointe sur son site de source préféré

Thanks
cs_ketchoupi Messages postés 14 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 23 novembre 2008
20 sept. 2006 à 18:20
Un grand merci cette petite class ma fait gagner un temps precieux
cs_Namiro Messages postés 3 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 6 août 2006
6 août 2006 à 20:25
Mais de rien EvilGost, on est la pour s'entraider, c'est bien normal.
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
6 août 2006 à 19:00
Pas bete Namiro, j'avais pas fait le rapprochement avec DEFault VALue...merci a toi :)
cs_Namiro Messages postés 3 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 6 août 2006
6 août 2006 à 16:12
Pour répondre à EvilGost:"excellent, merci.
mais à quoi sert "DefVal" dans le ReadString? " je croi avoir compris que c'est la valeur qui sera renvoyée si aucune occurence n'a été trouvée par exemple si tu cherches une clé qui n'existe pas, et bien cette fonction de renverra la valeur DefVal.
cs_Namiro Messages postés 3 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 6 août 2006
6 août 2006 à 15:51
Je ne suis que débutant en VB,mais j'ai quand même compris comment me servir de cette classe, et là j'ai été époustouflé, depuis le temps que je cherchais en vain comment réussir à manipuler des fichiers ".ini", et bien là j'ai été servi. Alors un grand merci à celui qui à écrit ce code mais aussi à ce site, grâce auquel il faut bien le dire je n'aurais jamais trouvé autant de codes sources et d'aides.Merci encore
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
4 août 2006 à 11:22
excellent, merci.
mais à quoi sert "DefVal" dans le ReadString?
pbocsak Messages postés 20 Date d'inscription dimanche 15 janvier 2006 Statut Membre Dernière intervention 22 novembre 2007
30 juil. 2006 à 22:26
Je ne sais pas ce que vous utilisez comme compilateur, mais mon MS VB 2005 Express Edition me dit "INIReader" is not defined :-s. J'ai loupé qqch?
pymaster Messages postés 74 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 14 août 2006
14 juil. 2006 à 19:25
Génial !

Code simple, bien fait ... en gros rien à redire

Merci beaucoup, ce code va me faire sauver beaucoup de temps ^_^

PY
lebelm Messages postés 17 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 11 juin 2006
4 juin 2006 à 05:16
Super, on aurait pas pu avoir plus simple. Rien de plus à ajouter à part un gros merci.
sousoulebarbu Messages postés 101 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 11 janvier 2009
11 avril 2006 à 22:53
Super code, simple, utile et efficace.
Bravo
GAETANDAUSSY Messages postés 1 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 24 janvier 2006
24 janv. 2006 à 10:12
superbe source
grand merci

chdauss
Utilisateur anonyme
11 mai 2005 à 00:10
La meilleure classe du genre de ce site.
Y a vraiment rien à redire, c'est tout simplement du travail de pro. Merci pour ça!!!
JBE57 Messages postés 2 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 17 août 2006
28 sept. 2004 à 16:06
Géant! juste ce qu'il me falait!
En effet, dur dur, le passage vers VB.net!
asem67 Messages postés 145 Date d'inscription mardi 3 septembre 2002 Statut Membre Dernière intervention 24 février 2008
29 août 2004 à 01:55
c'est cool c'est ce que je cherchais
dur le passage en VB.net !!!!!
mais ça viendra comme le vb6
skowee59 Messages postés 78 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 29 juin 2006
19 avril 2004 à 13:55
Effectivement, pour l'instant, je n'avais pas télécharger le ZIP car je ne pensais pas qu'il y avait une classe dedans.
C ça qd on est pressé ;-) lol
Merci pour l'info.
@+
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
19 avril 2004 à 12:36
Tu ajoute simplement la classe que tu trouve dans le ZIP source à ton projet et c'est fait. Tu à acces à cette classe.
skowee59 Messages postés 78 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 29 juin 2006
19 avril 2004 à 11:50
Qq'un pourrait-il me dire à quoi correspond ==> New INIReader ?
Faut-il ajouter une référence pour pouvoir s'en servir ?
D'avance, merci.
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
16 avril 2004 à 16:53
Là c'est plus possible.
Valeur=INI.ReadString("TAG", "KEY", "")
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
16 avril 2004 à 09:36
oui et pour la lecture ?
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
16 avril 2004 à 08:33
Merci Bill.
cs_666Ange Messages postés 19 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 mars 2009
16 avril 2004 à 02:57
Ca marche comme ca a peu près :

Dim INI As New INIReader(Application.StartupPath.ToString() & "\datas.ini")

INI.Write("essai", "t", 100) 'creer une section "essai" qui contient une clé "t" de valeur 100

INI.DeleteKey("essai", "t") 'efface la clé "t" de la section "essai"

'Tu peux meme faire if(not INI.DeleteKey("essai", "t")) then erreur etc etc ...
cs_666Ange Messages postés 19 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 mars 2009
16 avril 2004 à 02:49
Pas besoin de commentaires pour un si petit source, si tu es débutant c'est pas de ton niveau et si tu n'es pas débutant alors tu comprendra sans problèmes !!!

Bon source utile pret à l'emploi pour tous les niveaux ! Bravo et merci ca évite de se fatiguer à tout écrire et réinventer soi même ce qui existe déja.

Toute ma reconnaissance

Cordialement, Bill Tcherno
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
22 janv. 2004 à 09:49
salut !

Juste pour dire que de copier coller un code sans commantaire sa sers a rien ! on sais meme pas quoi faire avec sa !

mais en tout ca sa donne des idés
si tu pouvais faire qu'elle que modification sur ton code et dire comment sa fonctionne sa serait trop top !

merci
sebaznar Messages postés 15 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 8 juin 2005
10 juin 2003 à 17:05
D'abord je te remercie car cette classe m'a trop trop servi pour torturer les fichier ini dans tout les sens : MERCI

Un petit probleme toutefois : je n'ai pas réussi à utiliser DeleteKey et DeleteSection :(

Si tu pouvais m'éclairer un peu, je n'ai pas du tout comprendre de comment on s'en sert :)

tchô
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
15 janv. 2003 à 18:33
uh....j'en reste sans voix....
j'ai pas tester perso parce que j'ai pas compris a quoi ca servait..(honte a moi)
mais tu as du sacrement te casser la tete pour faire marcher tout ca....
Rejoignez-nous