begin process at 2012 02 12 18:33:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > LES INI EN VB.NET

LES INI EN VB.NET


 Information sur la source

Note :
9 / 10 - par 12 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Source .NET ( DotNet ) Niveau :Débutant Date de création :30/06/2003 Date de mise à jour :30/06/2003 23:33:42 Vu :13 911

Auteur : SupraDolph

Ecrire un message privé
Site perso
Commentaire sur cette source (30)
Ajouter un commentaire et/ou une note

 Description

Je sais que cette source existe déjà sur ce site mais je trouve un module plus pratique à utiliser. C'est pourquoi je la poste.

J'espère qu'elle pourra vous être utile a vous aussi.
a+
SupraDolph.

Source

  • Module ModINI
  • 'Nom du fichier INI
  • Dim Fichier As String = Application.StartupPath & "\Backup.ini"
  • 'Constante
  • Const MAX_ENTRY As Integer = 32768
  • #Region "Lire 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
  • ' Cette API permet de lire des fichiers d'initialisations. La fonction retourne 0 si la lecture du fichier d'initialisation a échoué, sinon elle retourne 1.
  • 'lpApplicationName définit le nom de la section,
  • 'lpKeyName définit le nom de la clef,
  • 'lpDefault retourne la valeur par défaut si la clef n'est pas définie,
  • 'lpReturnedString contient la valeur de la clef si elle existe sinon elle contient la valeur lpDefault,
  • 'nSize est la taille de la variable lpReturnedString en octet,
  • 'lpFileName définit le nom du fichier d'initialisation.
  • Function LireINI(ByVal Entete As String, ByVal Variable As String) As String
  • Dim defval As String = ""
  • Try
  • Dim StrBuild As New System.Text.StringBuilder(MAX_ENTRY)
  • Dim Ret As Integer = GetPrivateProfileString(Entete, Variable, defval, StrBuild, MAX_ENTRY, Fichier)
  • Return StrBuild.ToString
  • Catch
  • Return defval
  • End Try
  • End Function
  • #End Region
  • #Region "Ecrire 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 Long
  • ' Cette API permet de créer ou de modifier vos propres fichiers d'initialisations sans se soucier des détails (par exemple... la gestion des fichiers), si le fichier n'existe pas il est créé, sinon il est modifié. La fonction retourne 0 si la création ou la modification du fichier d'initialisation a échoué, sinon elle retourne 1.
  • 'lpApplicationName définit le nom de la section,
  • 'lpKeyName définit le nom de la clef,
  • 'lpString définit la valeur à ajouter,
  • 'lpFileName définit le nom du fichier d'initialisation.
  • Function EcrireINI(ByVal Entete As String, ByVal Variable As String, ByVal Valeur As String)
  • WritePrivateProfileString(Entete, Variable, Valeur, Fichier)
  • End Function
  • #End Region
  • #Region "Supprime INI"
  • Function SupprimeINI(ByVal Entete As String, Optional ByVal Variable As String = Nothing)
  • WritePrivateProfileString(Entete, Variable, vbNullString, Fichier)
  • End Function
  • #End Region
  • #Region "Sections INI"
  • Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer() As Byte, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
  • Function SectionsINI() As ArrayList
  • SectionsINI = New ArrayList
  • Dim Buffer(MAX_ENTRY) As Byte
  • Dim BuffStr As String
  • Dim PrevPos As Integer = 0
  • Dim Length As Integer
  • Try
  • Length = GetPrivateProfileSectionNames(Buffer, MAX_ENTRY, Fichier)
  • Catch
  • Exit Function
  • End Try
  • Dim ASCII As New System.Text.ASCIIEncoding
  • If Length > 0 Then
  • BuffStr = ASCII.GetString(Buffer)
  • Length = 0
  • PrevPos = -1
  • Do
  • Length = BuffStr.IndexOf(ControlChars.NullChar, PrevPos + 1)
  • If Length - PrevPos = 1 OrElse Length = -1 Then Exit Do
  • Try
  • SectionsINI.Add(BuffStr.Substring(PrevPos + 1, Length - PrevPos))
  • Catch
  • End Try
  • PrevPos = Length
  • Loop
  • End If
  • End Function
  • #End Region
  • End Module
Module ModINI
    'Nom du fichier INI
    Dim Fichier As String = Application.StartupPath & "\Backup.ini"
    'Constante
    Const MAX_ENTRY As Integer = 32768
#Region "Lire 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
    '   Cette API permet de lire des fichiers d'initialisations. La fonction retourne 0 si la lecture du fichier d'initialisation a échoué, sinon elle retourne 1. 
    'lpApplicationName définit le nom de la section, 
    'lpKeyName définit le nom de la clef, 
    'lpDefault retourne la valeur par défaut si la clef n'est pas définie, 
    'lpReturnedString contient la valeur de la clef si elle existe sinon elle contient la valeur lpDefault, 
    'nSize est la taille de la variable lpReturnedString en octet, 
    'lpFileName définit le nom du fichier d'initialisation. 
    Function LireINI(ByVal Entete As String, ByVal Variable As String) As String
        Dim defval As String = ""
        Try
            Dim StrBuild As New System.Text.StringBuilder(MAX_ENTRY)
            Dim Ret As Integer = GetPrivateProfileString(Entete, Variable, defval, StrBuild, MAX_ENTRY, Fichier)
            Return StrBuild.ToString
        Catch
            Return defval
        End Try
    End Function
#End Region

#Region "Ecrire 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 Long
    '   Cette API permet de créer ou de modifier vos propres fichiers d'initialisations sans se soucier des détails (par exemple... la gestion des fichiers), si le fichier n'existe pas il est créé, sinon il est modifié. La fonction retourne 0 si la création ou la modification du fichier d'initialisation a échoué, sinon elle retourne 1. 
    'lpApplicationName définit le nom de la section, 
    'lpKeyName définit le nom de la clef, 
    'lpString définit la valeur à ajouter, 
    'lpFileName définit le nom du fichier d'initialisation. 
    Function EcrireINI(ByVal Entete As String, ByVal Variable As String, ByVal Valeur As String)
        WritePrivateProfileString(Entete, Variable, Valeur, Fichier)
    End Function
#End Region

#Region "Supprime INI"
    Function SupprimeINI(ByVal Entete As String, Optional ByVal Variable As String = Nothing)
        WritePrivateProfileString(Entete, Variable, vbNullString, Fichier)
    End Function
#End Region

#Region "Sections INI"
    Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer() As Byte, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
    Function SectionsINI() As ArrayList
        SectionsINI = New ArrayList
        Dim Buffer(MAX_ENTRY) As Byte
        Dim BuffStr As String
        Dim PrevPos As Integer = 0
        Dim Length As Integer
        Try
            Length = GetPrivateProfileSectionNames(Buffer, MAX_ENTRY, Fichier)
        Catch
            Exit Function
        End Try
        Dim ASCII As New System.Text.ASCIIEncoding
        If Length > 0 Then
            BuffStr = ASCII.GetString(Buffer)
            Length = 0
            PrevPos = -1
            Do
                Length = BuffStr.IndexOf(ControlChars.NullChar, PrevPos + 1)
                If Length - PrevPos = 1 OrElse Length = -1 Then Exit Do
                Try
                    SectionsINI.Add(BuffStr.Substring(PrevPos + 1, Length - PrevPos))
                Catch
                End Try
                PrevPos = Length
            Loop
        End If
    End Function
#End Region
End Module

 Conclusion

Si quelqu'un laisse un commentaire, qu'il parle du code et NON de mon orthographe merci.
Pour ceux qui ne comprènent pas pourquoi je laisse ce message :
cf : Ma source précédente Backup CD's.
http://www.vbfrance.com/article.aspx?Val=947 5


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) BACKUP CD'S
Source avec Zip Source .NET (Dotnet) LIRE/ECRIRE UN FICHIER TEXTE EN VB.NET
Source avec Zip Source avec une capture DÉGRADÉ À N COULEURS AVEC API
Source avec Zip Source avec une capture FILMS-LISTEUR
Source avec Zip ROTATIVESCROLL

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

Commentaires et avis

Commentaire de 666Ange le 19/08/2003 17:46:16

merci, j'en avais que pour vb6

Commentaire de Freeman88 le 03/10/2003 15:59:38

  Merci pour ton code, qui m a bien aidé, seul code que j'ai reussi  à faire fonctionner pour vb.net; seul bémol dans la fonction SectionsINI(), ArrayList est un type indéfini par .net, je suppose que ca correspond à un de tes types!! Cool en tout cas!!

Commentaire de SupraDolph le 03/10/2003 19:57:44

Freeman88 arraylist fait partie de vb.net je ne comprend pas pourquoi sur ta version se serai différant.
Merci de ton commentaire sa fai toujours plaisir de savoir que ses sources sont utiles et faciles a utilisée.

Commentaire de gaston19 le 23/10/2003 07:52:11

Merci pour ton code, je connaissais l'autre version et je trouve tes explications plus claires. Continue ... !

Commentaire de Dromax le 02/11/2003 05:24:26

merci je cherchais ça desesperemment pour .Net

SUPER !!!

Commentaire de neotrunk le 05/03/2004 23:48:09

En un mot : SUPERBE !!!

Pas un seul tuto ne donne réellement la méthode pour VB .Net...

Commentaire de anisenit le 19/08/2004 14:50:01

merci pour ton code, je suis vraiment interressé de savoir de plus à propos des utilisations VB.NET, je suis encore debutant...

Commentaire de EvilGost le 14/10/2004 10:51:16

oui, excellent :)
maintenant que l'on commence vraiment à passer en VB.Net, il est très utile de trouver les sources que l'on avait en VB6 en .Net car il n'est pas simple de passer de l'évènementiel à l'objet :)
merci à toi :)

Commentaire de Data2004 le 16/11/2004 08:56:19

Merci pour ton code. Il est réussi et bien commenté.
Il va m'être bien utile !

Commentaire de 35jmb35 le 20/01/2005 14:41:10

Tout d'abord, je préviens tout de suite, je suis débutant sur VB.net. Ce qui suis est donc peut-être complètement stupide.

J'ai eu le même problème que Freeman88. Pour réglé cela, j'ai du rajouter "Imports System.Collections ".
Par contre, j'ai aussi un problème avec "vbNullString" et "ControlChars.NullChar" qui sont en erreur lors de la compilation : Name is not déclared !!!
Merci à SupraDolph pour ce source et merci d'avance à tous pour votre aide.

Commentaire de 35jmb35 le 21/01/2005 17:23:32

J'ai trouvé la solution à mon problème, il suffit de rajouter "Imports Microsoft.VisualBasic".

Une autre solution semble être de rajouter "System.Collections." ou "Microsoft.VisualBasic." devant les items en question. Par exemples :

Function SectionsINI() As System.Collections.ArrayList
ou
Microsoft.VisualBasic.vbNullString

Commentaire de SupraDolph le 21/01/2005 18:27:05

Je trouve bizard que vous ayer renconté des problèmes.
Toutefois j'ai peut être une idée.
Je pense que vous avez mis la source dans une forme et non dans un module, il me semble que les imports implicites sont différent.
Merci de me le confirmer.
Et merci 35jmb35 pour les solutions que tu apportées et qui aiderons peut-êtres d'autres personnes.

Commentaire de 35jmb35 le 23/01/2005 13:38:36

Pour ma part, j'ai mis cela dans un module. Par contre, j'utilise SharpDevelop comme IDE. Cela me permet de développer en VB.net et C# gratuitement. Pour plus d'info, http://plasserre.developpez.com/v1-dbis.htm
Autre info, j'ai rajouté le chemin du fichier en paramètre de toutes les fonctions. Exemple :
Function SectionsINI(ByVal Fichier As String) As System.Collections.ArrayList

Commentaire de merline le 01/02/2005 17:05:54

Saviez-vous que l'un des avantages de vb.net est de ne plus avoir besoin de fichier ini ?
Il suffit maintenant d'ajouter un fichier app.config à votre projet avec par exemple le chemin de la base de données ainsi :
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="CheminBase" value="c:\base.mdb"/>
</appSettings>
</configuration>

Pour le rappeller ensuite :
Private Shared CheminBase As String = System.Configuration.ConfigurationSettings.AppSettings.Get("CheminBase")

Celà permet de ne pas avoir de fichier qui se balade sur le disque avec tous les pbs que celà engendre...
Enfin c t juste une info au passage... Ton code est malgré tout très bien mais n'est en fait plus très nécessaire.

Ciao

Commentaire de SupraDolph le 02/02/2005 09:17:33

Merci pour ton commentaire merline,
J'avai bien essayer d'utiliser les fichiers xml sans grand succès je réessayerai de faire comme tu vien de le dire.

++
-----------------------
SupraDolph

Commentaire de niluje le 02/02/2005 11:55:02

Salut,

merci pr ta source ;) je vais te la noter ca va pas trainer ... :D

Par contre je rencontre un pb (non pas avec ton code)
J'ai dans mon fichier ini dans une section un nombre aléatoire de paramètres. Comment est ce que je pourrait les récupérer ?
Via une bouble while j'imagine mais je ne vois pas avec quelle instruction ...

voila si kkun à une idée :)

Commentaire de jdva le 16/02/2005 21:02:08

SUPER, bravo.
Comme d'autres je suis débutant et je n'arrivait pas lire/écrire un fichier INI, jusqu'à ce que je découvre ton code.
Merci
J'ai essayé avec AppSettings, mais sans succès (pour le moment...)

Commentaire de SupraDolph le 19/02/2005 11:38:33

Salut jdva, encore merçi pour tes encouragements :)
Avec le AppSetting, on peut lire des valeurs mais on ne peut pas en écrire, ou du moins je n'est pas réussit

Commentaire de Lucyberad le 10/05/2005 00:53:50

Salut, deja j'aimerais remercier supradolph pour nous offrir une version .net des .ini
seulement j'ai 2-3 truc qui me gêne:
j'ai en ma possession vb.net 2003 architect et vb.net 2005 (beta1 que je vais bientot faire passer a la 2)
j'ai le probleme suivant: sous vs 2003 le code est bien reconnu, sous vb 2005 il me demande de rajouter un "as quelquechose" apres les function EcrireINI et SuprimmeINI
j'ai pas ce probleme sou vs 2003 (une reeur ou une correction du langage par microsoft?)

2eme probleme venant de ma part cette fois, j'ai pas trop compris ce qu'est max_entry
merci de m'eclairer la dessus...

sinon c'est une source qui a l'air prometteuse.
je vous souhaite bonne prog a tous.

Commentaire de JJDai le 16/05/2005 14:08:17

max_entry  = 32768, c'est la taille maximum que peut avoir un fichier INI. En réalité c'est le double, mais certains editeurs de texte sont limité à 32768 octets et tronque le fichier (BlocNote notamment, sauf erreur), ce qui peut être dangereux.
Il est rare qu'un fichier INI atteigne cette taille, mais si on le détourne de sa fonction première comme moi, pour y stocker des petits volumes de données, genre listes de référence, parametage de grille, ... on y arrive rapidement.
Ce qui m'ennuie dans cette source, qui par ailleurs est excellente, c'est l'utilisation des API dont je pensais me débérrasser avec DotNet. Et bin non, je cherchais en vain l'espace de nom qui gérait les frichiers INI, que neni, y en a pas.
Merci encore.

Commentaire de JJDai le 16/05/2005 14:43:03

Pour LucyBerad, le "as ???" qu'il faut ajouter vient d'une option propre a DotNet. Dans les propriétés du projet, "propriés communes-> génération" si l'option "Strict " est à "On", on est en pur dotNet, et donc il refuse une déclaration non typée du genre:
         function toto()
Il faut écrire:
         function toto() as long 'par exemple

Par contre si cette option est à "Off" il accepte la permissivité de VB6 et accepte une déclaration non type qui sera implicitement de type variant.
Je ne maitrise pas encore DotNet, mais il est surement plus propre je pense de mettre cette option à "on" et d'oublier définitement les mauvaises habitudes de VB6 (quand on en avait, je parle pour moi !!!). Mais il est vrai que de la laisser à "Off" permet un passage à DotNet un peu plus en douceur, mais attention au surprise.

Commentaire de Lucyberad le 16/05/2005 17:30:49

merci pour tes infos JJdai, j'ai compris la necessité de MAX_ENTRY et mon probleme etait en fait que j'utilisais VB2005 express en beta 1.
En effet je me suis procuré visual 2005 en version complete beta 2 et le probleme n'est plus revenu (ainsi que plein d'autres au passage).
Sinon au passage je sais comment faire du vb6 sous .net meme si je n'ai que fait du .net principalement
ma vie de programmeur: (merde! y remets ca lol)
j'ai debuter sous vba, j'ai fait 3 ligne pas plus ca m'as vite soulé, j'ai pris vb6 j'ai touché 3 bouton en fesant un rpogramme avec un minimun de code (tout le reste en concepteur lol)
et maintenant je me lance dans le .net a fond !
voila pour la petite histoire, afin de dire que vb.net as un avantage certain au niveau du comfort du programmeur et il faut quitter les routine vb6 SAUF quand ils nous mettent des app.config a la mormoilmeu !
(oula je vien a peine de me rendre compte que je m'emportait lol)
@+
L U C Y I3 E R @ D

p.s: merci pour votre soutien a tous !

Commentaire de SupraDolph le 19/05/2005 13:40:03

Désolé Lucyberad de répondre un peu tardivement...
Je ne suis pas encore passé en VB 2005 mais pour le problème que tu a rencontré sur les fonctions EcrireINI et SuprimmeINI c'est entièrement de ma faute (de débutant :( ) en effet lorsque j'ai écrit se bout de code je n'avais pas très bien saisi la différence entre "sub" et "function", un "sub" ne permet pas de renvoyer des paramètres contrairement à "function".
Donc pour EcrireINI et SuprimmeINI tu remplace "function" par "sub" ou même par "public sub" pour être plus précis.
Voili voilou, bonne prog à tous !
                                  SupraDolph.

Commentaire de rockman18 le 25/06/2007 11:01:34

D'accord ce code a 2 ans mais je le trouve encore d'actualité car il m'a été grandement utile pour un ptit developpement perso. Sinon j'ai fait 2-3 modif surtout pour pouvoir à l'appel de la fonction choisir le Fichier ini à utiliser (mon prog à besoin de 3 fichiers ini différents).

Merci beaucoup SupraDolph.

Commentaire de Lucyberad le 25/06/2007 13:27:25

bon, je suis depuis passé au app.settings (et au C#) :D

mais c vrai que la simplicité des ini les rends accesbiles facielement au débutants (surtout en vb)

Commentaire de SupraDolph le 25/06/2007 14:31:50

J'avais moi aussi fait ma petite version avec la possibilité de changer d'ini selon mes besoins.
Pour le app.settings c'est vrai que je n'avais pas encore fait attention au fait qu'il était présent en vb mais il faut dire que j'ai vraiment ralenti mes déveleppements en se moment par manque de temps.

Commentaire de LimDulLeNecromancien le 19/06/2008 18:07:16

Bonjour.

Je débute totalement en programmation VB
(je code un peut en php)

J'ai quelques questions.
Tout d'abord où dois-je insérer ce module dans on programme ?

Ensuite, je ne parviens pas à comprendre ce que fait chaque ligne en détail.
Ca serai trop long je pense qu'on m'explique terme par terme mais je bloque sur un truc.

Je ne vois pas de boucle.

Comment dans un ini de plusieurs lignes contenant plusieurs paramètres ce programme fonctionne ?
Comment transforme-t-il une ligne dans le genre:
nom_du_parametre=valeur
en une variable nommée nom_du_parametre et ayant la valeur du ini ?
Et cela pour chaque ligne du fichier ini ?

Commentaire de SupraDolph le 19/06/2008 22:07:54

Tu ne trouves pas de boucle dans ce programme et c'est normal, car il utilise des API Windows.
En fait, les boucles se trouvent dans une classe complilée (kernel32.dll). Cette classe compiliée contient des méthodes dont GetPrivateProfileStringA pour la lecture par exemple.(pour plus d'informations : http://msdn.microsoft.com/fr-fr/library/ms724353(en-us,VS.85).aspx)
Ce dont tu as besoin pour utiliser ce programme.
Insère le programme dans un nouveau module nommé ModINI.

Pour écrire dans un fichier INI :
Call EcrireINI("Menu", "Option", "1")

Cela va créer un fichier "Backup.ini" à la racine de ton projet contenant :
>>>> BOF <<<<
[Menu]
Option=1
>>>> EOF <<<<

Pour lire la valeur :
MsgBox LireINI("Menu", "Option")  'Affiche 1

Pour lire les en-têtes de section :
Dim tableau As ArrayList
tableau = SectionsINI()
MsgBox tableau(0) 'Affiche Menu

Pour supprimer une variable :
Call SupprimeINI("Menu", "Option")

Pour supprimer une section :
Call SupprimeINI("Menu")

Commentaire de LimDulLeNecromancien le 23/06/2008 00:18:18 9/10

Merci beaucoup.
Cela fonctionne parfaitement et j'ai même pu adapter le truc pour pouvoir faire une application multi-langues avec des fichiers de langue .lng forgé comme des fichiers .ini

Merci
Merci.

Commentaire de dgreg60 le 05/01/2009 19:59:47 8/10

Salut,

Merci pour cette source : Claire, efficace et bien commenté.

Je me suis permis de la compiler en DLL en passant en paramètre le non du fichier INI.

Je publis la sources de la DLL.

Encore une fois merci,

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales