IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

wallace1

Ecrire et lire dans un fichier de configuration INI (Pinvoke)

Noter ce billet
par , 18/11/2016 à 21h08 (1259 Affichages)
Il existe cette classe très simple d'usage :


Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
Imports System.Runtime.InteropServices
Imports System.IO
Imports System.Text
 
Public Class Ini
 
#Region "Natives Methods"
 
    Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" (lpApplicationName As String,
                                                                                                               lpKeyName As String, lpDefault As String,
                                                                                                               lpReturnedString As String, nSize As Integer,
                                                                                                               lpFileName As String) As Integer
 
    Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringW" (lpApplicationName As String,
                                                                                                               lpKeyName As String, lpString As String,
                                                                                                               lpFileName As String) As Integer
 
    <DllImport("kernel32")>
    Private Shared Function GetPrivateProfileString(Section As String, Key As Integer, Value As String, <MarshalAs(UnmanagedType.LPArray)> Result As Byte(), Size As Integer, FileName As String) As Integer
    End Function
 
    <DllImport("kernel32")>
    Private Shared Function GetPrivateProfileString(Section As Integer, Key As String, Value As String, <MarshalAs(UnmanagedType.LPArray)> Result As Byte(), Size As Integer, FileName As String) As Integer
    End Function
 
#End Region
 
#Region "Public Methods"
 
    'Suppression de section
    Public Shared Sub DeleteSection(INIPath As String, SectionName As String)
        Dim lpKeyName As String = Nothing
        Dim lpString As String = Nothing
        WritePrivateProfileString(SectionName, lpKeyName, lpString, INIPath)
    End Sub
 
    'Suppression de clé
    Public Shared Sub DeleteKey(INIPath As String, SectionName As String, KeyName As String)
        Dim lpString As String = Nothing
        WritePrivateProfileString(SectionName, KeyName, lpString, INIPath)
    End Sub
 
    'Lecture Valeur d'une section et clé spécifiée
    Public Shared Function ReadValue(INIPath As String, SectionName As String, KeyName As String) As String
        Return ReadValue(INIPath, SectionName, KeyName, "")
    End Function
 
    'Lecture Valeur d'une section et clé spécifiée (retourne valeur par défaut si elle n'existe pas)
    Public Shared Function ReadValue(INIPath As String, SectionName As String, KeyName As String, DefaultValue As String) As String
        Dim lpReturnedString As String = Strings.Space(2048)
        Dim length As Integer = GetPrivateProfileString(SectionName, KeyName, DefaultValue, lpReturnedString, lpReturnedString.Length, INIPath)
        If length > 0 Then
            Return lpReturnedString.Substring(0, length)
        End If
        Return ""
    End Function
 
    'Ecriture Clés/Valeurs dans une section spécifiée
    Public Shared Sub Write(INIPath As String, SectionName As String, KeyName As String, TheValue As String)
        WritePrivateProfileString(SectionName, KeyName, TheValue, INIPath)
    End Sub
 
    'Détecte si section spécifiée existe
    Public Shared Function SectionExists(INIPath As String, SectionName As String) As Boolean
        Return SectionNames(INIPath).Any(Function(s) s.ToLower = SectionName.ToLower)
    End Function
 
    'Retourne tous les noms des sections existantes dans le fichier de configuration
    Public Shared Function SectionNames(INIPath As String) As String()
        Dim maxsize As Integer = 500
        While True
            Dim bytes As Byte() = New Byte(maxsize - 1) {}
            Dim size As Integer = GetPrivateProfileString(0, "", "", bytes, maxsize, INIPath)
            If size < maxsize - 2 Then
                Dim Selected As String = Encoding.ASCII.GetString(bytes, 0, size - (If(size > 0, 1, 0)))
                Return Selected.Split(New Char() {ControlChars.NullChar})
            End If
            maxsize *= 2
        End While
        Return Nothing
    End Function
 
    'Retourne toutes les clés existantes d'une section spécifiée
    Public Shared Function SectionKeys(INIPath As String, sectionName As String) As String()
        Dim maxsize As Integer = 500
        While True
            Dim bytes As Byte() = New Byte(maxsize - 1) {}
            Dim size As Integer = GetPrivateProfileString(sectionName, 0, "", bytes, maxsize, INIPath)
            If size < maxsize - 2 Then
                Dim entries As String = Encoding.ASCII.GetString(bytes, 0, size - (If(size > 0, 1, 0)))
                Return entries.Split(New Char() {ControlChars.NullChar})
            End If
            maxsize *= 2
        End While
        Return Nothing
    End Function
 
#End Region
 
End Class


Comment l'utiliser :


1- Ecrire une valeur :

Code ini : Sélectionner tout - Visualiser dans une fenêtre à part
Ini.Write("C:\YourIniFile.ini", "Section0", "Key0","Value0")


2- Lire une valeur :

Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
Dim Val as string = Ini.ReadValue("C:\YourIniFile.ini", "Section0","Key1")


3- Enumérer les noms de sections du fichier ini : :

Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
For Each Section In Ini.SectionNames("C:\YourIniFile.ini")
    MsgBox(Section)
Next

4- Exemple de contenu du fichier .ini :

Code ini : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
[Section0]
Key0=Value0
Key1=Value1
 
[Section1]
Key0=Value0
Key1=Value1

Bonne soirée.

Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Viadeo Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Twitter Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Google Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Facebook Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Digg Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Delicious Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog MySpace Envoyer le billet « Ecrire et lire dans un fichier de configuration INI (Pinvoke) » dans le blog Yahoo

Mis à jour 16/08/2017 à 18h44 par Malick (Ajout balises code)

Catégories
DotNET , C# , VB.NET

Commentaires