Discussion: Modif fichier INI [Débutant]

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    31
    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 : 31
    Points : 11
    Points
    11

    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
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 35
    Points : 75
    Points
    75

    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 émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 332
    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 332
    Points : 2 895
    Points
    2 895

    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
    31
    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 : 31
    Points : 11
    Points
    11

    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
    Membre expert
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2016
    Messages
    2 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2016
    Messages : 2 085
    Points : 3 547
    Points
    3 547
    Billets dans le blog
    1

    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.
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

  6. #6
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 822
    Points : 7 793
    Points
    7 793
    Billets dans le blog
    17

    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.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    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
    31
    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 : 31
    Points : 11
    Points
    11

    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
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 535
    Points : 3 155
    Points
    3 155
    Billets dans le blog
    6

    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
    31
    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 : 31
    Points : 11
    Points
    11

    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ébutant
    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