IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modif fichier INI [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut Modif fichier INI
    Bonjour, j'utilise du code trouvé sur le net pour gérer les fichiers INI (oui c'est mal sauf que vue la complexité, c’était la meilleur chose à faire pour mon cas )

    Voici le code en entier (les fonctions pour supprimer la clé et la section sont à partir de la ligne 97) :
    Code : 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
    102
    103
    104
    105
    106
    Imports System.Runtime.InteropServices.Marshal
     
    Public Class FichierINI
        Private Declare Function GetPrivateProfileSection Lib "kernel32.dll" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedBuffer As IntPtr, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
        Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As IntPtr, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
        Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedBuffer As IntPtr, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
        Private Declare Function WritePrivateProfileSection Lib "kernel32.dll" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
        Private Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
     
        'Retourne un booléen indiquant l'existance ou non d'une section
        Public Function ExisteSection(ByVal File As String, ByVal Section As String) As Boolean
            Dim PtrCh As IntPtr
            Dim Lng As Integer
     
            PtrCh = StringToHGlobalAnsi(New String(vbNullChar, 1024))
            Lng = GetPrivateProfileSection(Section, PtrCh, 1024, File)
     
            Return Lng
        End Function
     
        'Retourne une collection contenant l'ensemble des sections du fichier "File"
        Public Function GetAllSections(ByVal File As String) As Collection
            Dim PtrCh As IntPtr
            Dim Sections As Collection
            Dim I, Lng As Integer
            Dim Chaine, SChaine As String
     
            PtrCh = StringToHGlobalAnsi(New String(vbNullChar, 1024))
            Lng = GetPrivateProfileSectionNames(PtrCh, 1024, File)
            Chaine = PtrToStringAnsi(PtrCh, Lng)
            FreeHGlobal(PtrCh)
     
            Sections = New Collection
            SChaine = ""
            For I = 0 To Lng - 1
                If Chaine.Chars(I) = vbNullChar Then
                    Sections.Add(SChaine)
                    SChaine = ""
                Else
                    SChaine = SChaine & Chaine.Chars(I)
                End If
            Next
            GetAllSections = Sections
            Sections = Nothing
        End Function
     
        'Retourne une collection contenant l'ensemble des clés de la section "Section" du fichier "File"
        Public Function GetSectionCles(ByVal File As String, ByVal Section As String) As Collection
            Dim PtrCh As IntPtr
            Dim Cles As Collection
            Dim I, Lng As Integer
            Dim Chaine, SChaine As String
     
            PtrCh = StringToHGlobalAnsi(New String(vbNullChar, 1024))
            Lng = GetPrivateProfileSection(Section, PtrCh, 1024, File)
            Chaine = PtrToStringAnsi(PtrCh, Lng)
            FreeHGlobal(PtrCh)
     
            Cles = New Collection
            SChaine = ""
            For I = 0 To Lng - 1
                If Chaine.Chars(I) = vbNullChar Then
                    Cles.Add(SChaine)
                    SChaine = ""
                Else
                    SChaine = SChaine & Chaine.Chars(I)
                End If
            Next
            GetSectionCles = Cles
            Cles = Nothing
        End Function
     
        'Retourne la valeur de la clé "Cle" de la section "Section" du fichier "File"
        Public Function GetCle(ByVal File As String, ByVal Section As String, ByVal Cle As String) As String
            Dim PtrCh As IntPtr
            Dim Lng As Integer
            Dim Chaine As String
     
            PtrCh = StringToHGlobalAnsi(New String(vbNullChar, 1024))
            Lng = GetPrivateProfileString(Section, Cle, "", PtrCh, 255, File)
            Chaine = PtrToStringAnsi(PtrCh, Lng)
            FreeHGlobal(PtrCh)
     
            GetCle = Chaine
        End Function
     
        'Insère une section dans le fichier "File"
        Public Function SetSection(ByVal File As String, ByVal Section As String, ByVal Valeur As String) As Boolean
            SetSection = WritePrivateProfileSection(Section, Valeur, File)
        End Function
     
        'Insère la clé "Cle" dans la section "Section" du fichier "File"
        Public Function SetCle(ByVal File As String, ByVal Section As String, ByVal Cle As String, ByVal Valeur As String) As Boolean
            SetCle = WritePrivateProfileString(Section, Cle, Valeur, File)
        End Function
     
        'Efface toute les clés de la section "Section"
        Public Function DelSection(ByVal File As String, ByVal Section As String) As Boolean
            DelSection = WritePrivateProfileSection(Section, "", File)
        End Function
     
        'Efface la valeur de la clé "Cle" de la section "Section"
        Public Function DelCle(ByVal File As String, ByVal Section As String, ByVal Cle As String) As Boolean
            DelCle = WritePrivateProfileString(Section, Cle, "", File)
        End Function
    End Class
    Sauf que pour effacer une clé ou une section, au lieu de la supprimer définitivement il me met une valeur nul pour la clé et pour la section il me supprime uniquement les clé

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    'De base
     
    [Section]
    Cle1=Valeur1
    Cle2=Valeur2
     
    'Après avoir supprimé les clés
     
    [Section]
    Cle1=
    Cle2=
     
    'Après avoir supprimé la section
     
    [Section]
    Et moi j'aimerai qu'il me supprime tout au lieu de me laisser la clé ou la section, est ce que que quelqu'un aurait une idée pour les modifications à effectuer dans le code ? (mes recherches sur le net étant infructueuses....)

    Merci d'avance pour vos réponses

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 38
    Points : 79
    Points
    79
    Par défaut
    Je pense que ça vient des chaîne vide que tu utilises dans les méthodes delete. Il faut utiliser null à la place je pense.

  3. #3
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Kamikazoide Voir le message
    Bonjour, j'utilise du code trouvé sur le net pour gérer les fichiers INI (oui c'est mal sauf que vue la complexité, c’était la meilleur chose à faire pour mon cas )
    Pourquoi ne pas utiliser un fichier XML? Tu design ton modèle de données et en deux lignes tu écris et lis ton fichier... Où est la complexité?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message
    Pourquoi ne pas utiliser un fichier XML? Tu design ton modèle de données et en deux lignes tu écris et lis ton fichier... Où est la complexité?
    J'ai fait le choix d'un fichier INI plutôt que XML vue que mes fichiers contiendront plusieurs centaines de clés et des dizaines de sections différentes avec un nombre et nom de clés différents pour presque chaque section. Les fichiers INI me semble donc plus adapté pour mon cas.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Personnellement,j'avais opté pour un xml comme fichier de config Hors j'ai rencontré des problèmes de lectures écritures entre les différents utilisateurs.

    Je me suis rabattu sur du SqlLite.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Tu peux toujours jeter un œil là-dessus
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    Tu peux toujours jeter un œil là-dessus
    Yes merci, c'est exactement ce que je cherchais !

    Citation Envoyé par dysorthographie Voir le message
    Je me suis rabattu sur du SqlLite
    Je connaissais le SQL et notamment le SQL server pour les bases de données en ligne, mais le SQLite je l'ai connu grâce à ton message.

    Donc oui effectivement pour mon usage il pourrai être pas mal et il semble assez simple d'utilisation tout en me permettant de commencer à mettre les mains dans le SQL. Mais sinon, y a t'il des avantages et inconvenants significatif (en terme de rapidité, simplicité, praticité ...) entre le INI, XML et le SQLite et lequel des trois me conseilleriez-vous ?

  8. #8
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bonjour,

    Le sujet de ta derniere interrogation a deja eté traité ici :

    https://www.developpez.net/forums/d1...n/#post8767952

    ++

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Merci

    Je vais plutôt suivre "dysorthographie" et me lancer dans le SQLite qui semble le plus adapté à mon usage pour la gestion de données et principalement en base de données local

    Merci à tous pour vos réponses en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Chemin javaw.exe + modification fichier INI
    Par fahdo dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 16/05/2017, 11h18
  2. Modification d'un fichier INI
    Par FredHilbert dans le forum Windows
    Réponses: 0
    Dernier message: 14/06/2013, 13h13
  3. modification des variables sur fichier ini
    Par laala.hamid dans le forum Débuter
    Réponses: 9
    Dernier message: 07/09/2011, 23h27
  4. Réponses: 3
    Dernier message: 31/03/2011, 21h28
  5. faire un fichier .ini
    Par florent dans le forum C++Builder
    Réponses: 14
    Dernier message: 31/05/2002, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo