begin process at 2012 02 12 15:35:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > UNE CLASSE QUI FAIT LA LECTURE ET L'ÉCRITURE DANS UN FICHIER INI

UNE CLASSE QUI FAIT LA LECTURE ET L'ÉCRITURE DANS UN FICHIER INI


 Information sur la source

Note :
6,67 / 10 - par 3 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Source .NET ( DotNet ) Niveau :Débutant Date de création :31/03/2005 Date de mise à jour :05/04/2005 10:49:10 Vu / téléchargé :10 521 / 645

Auteur : Badrazerty

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

 Description

une classe qui fait la Lecture et l'écriture dans un  fichier INI
*l'ouverture d'un fichier ini existant.
*Création d'un fichier ini avec constructeur
*Ecriture:section,clé,valeur
*Lecture valeur
*Vérification si une section ou un clé existe

Source

  • Public Class ReadWriteINI
  • Implements IDisposable
  • Private sFichierIni As String
  • Private sNomFichierIni As String
  • Private sCheminFichierIni As String
  • Public Event TextChange()
  • #Region "Manupilation Macroscopique <Dehors du sFichier ini>"
  • Private Function est_ini(ByVal sIni As String)
  • Return System.IO.Path.GetExtension(sIni).ToString.ToLower = ".ini"
  • End Function
  • Private Sub permute_fichiers(ByVal sFichierTmp As String)
  • System.IO.File.SetAttributes(sFichierIni, IO.FileAttributes.Normal) 'pour etre supprimer ensuite
  • System.IO.File.Delete(sFichierIni)
  • System.IO.File.Move(sFichierTmp, sFichierIni)
  • System.IO.File.SetAttributes(sFichierIni, IO.FileAttributes.Normal + IO.FileAttributes.ReadOnly)
  • End Sub
  • Public Sub Changer_ini(ByVal sVal As String, Optional ByVal bSur As Boolean = False)
  • If Not System.IO.File.Exists(sVal) Or Not est_ini(sVal) Then
  • If est_ini(sVal) Then 'si il n'est pas existant mais ini
  • If Not bSur Then 'l'utilisateur n'a pas forcer la création?ile faut lui demander
  • If MsgBox("Voulez vous commême créer un fichier qui comporte ce nom ?" _
  • , MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, _
  • "Ce nom n'est pas existant") <> MsgBoxResult.Yes Then
  • 'si l'utilisateur ne veut pas conserver ce nom
  • Me.Dispose()
  • Exit Sub
  • End If
  • End If
  • Try
  • System.IO.File.Create(sVal)
  • Exit Try
  • Catch ex As System.IO.DirectoryNotFoundException
  • System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(sVal))
  • System.IO.File.Create(sVal)
  • Exit Try
  • Catch ex As Exception
  • sVal = String.Empty
  • MsgBox("Verifier que le volume n'est pas on lecture seul ou inixistant", MsgBoxStyle.Critical, "Type d'erreur: " & ex.GetType.ToString)
  • End Try
  • RaiseEvent TextChange()
  • Else 'ni existant ni ini
  • MsgBox("Vérifier le nom du fichier et le chemin", MsgBoxStyle.Critical)
  • Exit Sub
  • End If
  • End If
  • If String.Compare(Me.sFichierIni, sVal) Then
  • Me.sFichierIni = sVal
  • RaiseEvent TextChange()
  • System.Threading.Thread.Sleep(700)
  • End If
  • End Sub
  • #End Region
  • #Region "Propriétées"
  • Public ReadOnly Property IniNom() As String
  • Get
  • sNomFichierIni = System.IO.Path.GetFileName(sFichierIni)
  • Return sNomFichierIni
  • End Get
  • End Property
  • Public ReadOnly Property IniChemin() As String
  • Get
  • sCheminFichierIni = System.IO.Path.GetDirectoryName(sFichierIni)
  • sCheminFichierIni.Trim("\")
  • sCheminFichierIni &= "\"
  • Return sCheminFichierIni
  • End Get
  • End Property
  • Public ReadOnly Property IniNomTotal() As String
  • Get
  • Return Me.sFichierIni
  • End Get
  • End Property
  • #End Region
  • #Region "Constructeur"
  • Sub New(ByVal sVal As String, Optional ByVal bSur As Boolean = False)
  • changer_ini(sVal, bSur)
  • End Sub
  • #End Region
  • #Region "Destructeur"
  • Public Sub Dispose() Implements System.IDisposable.Dispose
  • With Me
  • .sNomFichierIni = Nothing
  • .sFichierIni = Nothing
  • .sCheminFichierIni = Nothing
  • End With
  • End Sub
  • #End Region
  • #Region " long signature"
  • 'Public Function lireIniValeur(ByVal sSection As String, ByVal sCle As String, Optional ByRef iLine As Integer = 0) As String
  • ' 'elle retourne Nothing si la clé est non trouver
  • ' Dim bSection As Boolean = False 'On n'a pas trouver la bonne section
  • ' Dim bCle As Boolean = False 'On n'a pas trouver la bonne cle
  • ' sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
  • ' sSection = "[" & sSection & "]" 'Ajouter les crochets
  • ' Dim sValeur As String 'variable où on va mètre la valeur du cle
  • ' Try
  • ' Dim monStreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
  • ' Dim sLine As String ' Variable contenant le texte de la sLine
  • ' iLine = 0
  • ' Do
  • ' 'REMARQUE:on sore de la boucle si:
  • ' '1-on a truver la clé
  • ' '2-on a trouver la section est on a pas trouver la clé
  • ' '3-Sortie normal: si on a pas trouver la clé
  • ' sLine = monStreamReader.ReadLine : iLine += 1
  • ' If sLine <> Nothing And Left(sLine, 1) <> ";" And sLine <> "" Then
  • ' 'les lignes necessaires
  • ' If Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then 'si c'est une section
  • ' If Not bSection Then 'si on a pas trouver la bonne section
  • ' If String.Compare(sLine.ToLower, sSection.ToLower) = 0 Then 'notre section est trouver
  • ' bSection = True
  • ' 'la prochaine section on sore
  • ' 'la vérification du cle est possible
  • ' End If 'si notre section n'est pas trouver on va à la prochaine ligne
  • ' Else 'la section est déja trouver, la clé?
  • ' 'il faut sortir de la procédure
  • ' sValeur = Nothing
  • ' Exit Do
  • ' End If
  • ' Else 'si ce n'est pas une section
  • ' If bSection Then 'si on a trouver déja la section désirer
  • ' Dim n As Integer
  • ' n = InStr(1, sLine, "=")
  • ' If n <> 0 Then
  • ' If String.Compare(Left(sLine, n - 1).ToLower, sCle.ToLower) = 0 Then 'si on a trouver la cle
  • ' bCle = True
  • ' sValeur = Right(sLine, sLine.Length - n).ToString
  • ' Exit Do
  • ' End If 'si on a pas trouver la cle on va à la prochaine ligne
  • ' End If
  • ' End If 'Si on a pas trouver déja la section désirer on va à la prochaine ligne
  • ' End If
  • ' End If
  • ' Loop Until sLine Is Nothing
  • ' monStreamReader.Close()
  • ' 'jusqu'à ici tout va bien
  • ' Catch ex As Exception
  • ' MsgBox("Une erreur Function lireIniValeur", MsgBoxStyle.Critical, "sFichier config.ini...")
  • ' End Try
  • ' Return sValeur
  • 'End Function
  • 'Public Sub ecrireIniValeur(ByVal sSection As String, ByVal sCle As String, ByVal sValeur As String)
  • ' 'ATTENTION :il faut que l'attribut, du fichier ini, ne soit pas en lecture seul
  • ' Dim iValPos As Integer = 0
  • ' If lireIniValeur(sSection, sCle, iValPos) <> Nothing Then
  • ' Dim sFichierTmp As String = sCheminFichierIni & "tmpconfig.ini"
  • ' If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
  • ' Try
  • ' Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
  • ' Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
  • ' System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
  • ' Dim sLine As String ' Variable contenant le texte de la sLine
  • ' Dim i As Integer = 0
  • ' Do
  • ' sLine = monstreamReader.ReadLine : i += 1
  • ' If i = iValPos Then
  • ' monstreamWriter.WriteLine(sCle & "=" & sValeur)
  • ' Else
  • ' monstreamWriter.WriteLine(sLine)
  • ' End If
  • ' Loop Until sLine Is Nothing
  • ' monstreamReader.Close()
  • ' monstreamWriter.Close()
  • ' 'jusqu'à ici tout va bien
  • ' permute_fichiers(sFichierTmp)
  • ' Catch ex As Exception
  • ' MsgBox("Une erreur Sub ecrireIniValeur.", MsgBoxStyle.Critical, "ouverture du sFichier config.ini")
  • ' End Try
  • ' End If
  • 'End Sub
  • #End Region
  • #Region "Lecture seul"
  • Public Function Lire_cle(ByVal sSection As String, ByVal sCle As String) As String
  • Dim ipos As Int16 = 0
  • If Me.existe_Cle(sSection, sCle, ipos) Then
  • Dim i As Int16 = 0
  • Dim sLine As String
  • Try
  • Dim monstreamreader As New System.IO.StreamReader(Me.IniNomTotal)
  • Do
  • sLine = monstreamreader.ReadLine() : i += 1
  • If i = ipos Then
  • Dim svaleur As String
  • Dim n As Int16
  • n = InStr(1, sLine, "=")
  • svaleur = Right(sLine, sLine.Length - n).ToString
  • monstreamreader.Close()
  • Return svaleur
  • End If
  • Loop Until sLine = Nothing
  • monstreamreader.Close()
  • Catch ex As Exception
  • MsgBox(ex.GetType.ToString, MsgBoxStyle.Critical, "Function Lire_cle")
  • End Try
  • End If
  • End Function
  • #End Region
  • #Region "Controle"
  • Private Function existe_Section(ByVal sSection As String, Optional ByRef iLine As Integer = 0) As Boolean
  • sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
  • sSection = "[" & sSection & "]" 'Ajouter les crochets
  • Try
  • Dim monStreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
  • Dim sLine As String ' Variable contenant le texte de la sLine
  • Do
  • sLine = monStreamReader.ReadLine : iLine += 1
  • If Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then 'si c'est une section
  • If String.Compare(sLine.ToLower, sSection.ToLower) = 0 Then
  • monStreamReader.Close()
  • Return True
  • End If
  • End If
  • Loop Until sLine Is Nothing
  • monStreamReader.Close()
  • Catch ex As Exception
  • MsgBox("Une erreur Function existe_Section", MsgBoxStyle.Critical, "sFichier config.ini...")
  • End Try
  • iLine = 0
  • Return False
  • End Function
  • Private Function existe_Cle(ByVal sSection As String, ByVal sCle As String, Optional ByRef iLine As Int16 = 0) As Boolean
  • iLine = 0
  • If existe_Section(sSection, iLine) Then 'le valeur de iline= pos de sectionsi car elle existe (sinon =0)
  • Try
  • Dim monStreamReader As New System.IO.StreamReader(Me.sFichierIni)
  • Dim sLine As String
  • Dim i As Integer = 0
  • Do
  • sLine = monStreamReader.ReadLine() : i += 1 'incrementer la ligne de lecture avec i
  • If i > iLine Then 'car iline represente la section elle meme
  • If Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then Exit Do 'si 2 sections sont succésuves on sore
  • If bcompare(sLine, sCle) Then 'si cette ligne contienne notre clé
  • iLine = i 'on retourne la position
  • monStreamReader.Close() 'je ferme le fichier
  • Return True 'je sore
  • End If
  • End If
  • Loop Until sLine = Nothing
  • monStreamReader.Close()
  • Catch ex As Exception
  • MsgBox("Vérifier le code dans <existe_Cle>", MsgBoxStyle.Critical, ex.GetType.ToString)
  • End Try
  • End If
  • Return False 'si je suit ici se qui signefie que j'ai n'est pas trouver le clet donc iline=0
  • End Function 'la valeur du diline est soit la position du cle soit =0
  • Private Function bcompare(ByVal sLine As String, ByVal scle As String) As Boolean
  • Dim n As Integer
  • n = InStr(1, sLine, "=")
  • If n <> 0 Then
  • If String.Compare(Left(sLine, n - 1).ToLower, scle.ToLower) = 0 Then 'si on a trouver la cle
  • Return True
  • End If 'si on a pas trouver la cle on va à la prochaine ligne
  • End If
  • Return False 'ce n'est pas une ligne qui contien un clé
  • End Function
  • #End Region
  • #Region "Lecture/Ecriture"
  • Private Sub insert_cle(ByVal sCle As String, ByVal ipos As Integer)
  • Dim sFichierTmp As String = Me.IniChemin & "tmpconfig.ini"
  • If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
  • Try
  • Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
  • Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
  • System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
  • Dim sLine As String
  • Dim i As Integer = 0
  • Dim deja As Boolean = False
  • Do
  • sLine = monstreamReader.ReadLine : i += 1
  • 'si le cle n'existe pas ------------>pos=pos section===>inserer apres la position et avant une autre section
  • If i > ipos And ((Left(sLine, 1) = "[" And Right(sLine, 1) = "]") Or sLine = "") And Not deja Then
  • monstreamWriter.WriteLine(sCle & "=")
  • monstreamWriter.WriteLine(sLine)
  • deja = True
  • Else
  • monstreamWriter.WriteLine(sLine) '+
  • End If
  • Loop Until sLine Is Nothing
  • monstreamReader.Close()
  • monstreamWriter.Close()
  • 'jusqu'à ici tout va bien
  • permute_fichiers(sFichierTmp)
  • Catch ex As Exception
  • MsgBox("Sub ecrire_cle.si le cle n'existe pas", MsgBoxStyle.Critical, "ouverture du sFichier config.ini")
  • End Try
  • End Sub
  • Private Sub insert_cle(ByVal sCle As String, ByVal ipos As Integer, ByVal sval As String)
  • Dim sFichierTmp As String = Me.IniChemin & "tmpconfig.ini"
  • If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
  • Try
  • Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
  • Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
  • System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
  • Dim sLine As String
  • Dim i As Integer = 0
  • Do
  • sLine = monstreamReader.ReadLine : i += 1
  • 'si le cle n'existe pas ------------>pos=pos section===>inserer apres la position et avant une autre section
  • If i = ipos Then
  • If bcompare(sLine, sCle) Then monstreamWriter.WriteLine(sCle & "=" & sval)
  • Else
  • monstreamWriter.WriteLine(sLine) '+
  • End If
  • Loop Until sLine Is Nothing
  • monstreamReader.Close()
  • monstreamWriter.Close()
  • 'jusqu'à ici tout va bien
  • permute_fichiers(sFichierTmp)
  • Catch ex As Exception
  • MsgBox("Sub ecrire_cle.si le cle n'existe pas", MsgBoxStyle.Critical, "ouverture du sFichier config.ini")
  • End Try
  • End Sub
  • Public Function ecrire_Section(ByVal sSection As String) As Boolean
  • If existe_Section(sSection) Then
  • Return False
  • Else
  • Dim sFichierTmp As String = Me.IniChemin & "tmpconfig.ini"
  • If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
  • System.IO.File.SetAttributes(Me.sFichierIni, IO.FileAttributes.Normal)
  • sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
  • sSection = "[" & sSection & "]" 'Ajouter les crochets
  • Try
  • Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
  • Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
  • System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
  • Dim sLine As String
  • Do
  • sLine = monstreamReader.ReadLine
  • If sLine = Nothing Then
  • monstreamWriter.WriteLine(sSection)
  • Else
  • monstreamWriter.WriteLine(sLine)
  • End If
  • Loop Until sLine = Nothing
  • monstreamReader.Close()
  • monstreamWriter.Close()
  • permute_fichiers(sFichierTmp)
  • Return True
  • Catch ex As Exception
  • MsgBox("Vérifier le code dans <ecrire_Section>", MsgBoxStyle.Critical, ex.GetType.ToString)
  • End Try
  • End If
  • End Function
  • Public Function ecrire_cle(ByVal sSection As String, ByVal sCle As String, Optional ByVal sValeur As String = "") As Boolean
  • Dim ipos As Int16
  • Dim Sectpos As Int16
  • retry:
  • If existe_Section(sSection, ipos) Then 'si la section existe ipos=pos de section
  • Sectpos = ipos
  • If existe_Cle(sSection, sCle, ipos) Then 'si le cle existe ipos=pos du clé sinon =0
  • If sValeur = "" Then
  • Return False 'cad quand je ne met pas valeur<-->je ne veut pas le modifier
  • Else 'Cle=NouveauValeur ATTENTION:la position est celle du cle elle tj > pos section
  • insert_cle(sCle, ipos, sValeur) 'ipos ne change pas apres sortie=pos cle
  • End If
  • Else 'si le cle n'existe pas --> Remember:j'ai la position de section
  • insert_cle(sCle, Sectpos) 'ipos ne change pas apres sortie=pos section
  • End If
  • Else 'la section n'existe pas : creation de la section+cle+valeur par défaut a la fin du fichier
  • Select Case MsgBox("Cette section n'existe pas" & vbCrLf & "Risque d'inATTENTION ", _
  • MsgBoxStyle.Exclamation + MsgBoxStyle.AbortRetryIgnore, "Ecriture d'un cle")
  • Case MsgBoxResult.Ignore
  • ecrire_Section(sSection)
  • Try
  • Dim monStreamWriter As New System.IO.StreamWriter(Me.sFichierIni, True)
  • monStreamWriter.WriteLine(sCle & "=" & sCle)
  • monStreamWriter.Close()
  • Return True
  • Catch ex As Exception
  • MsgBox("Vérifier le code dans <ecrire_Cle>")
  • Return False
  • End Try
  • Case MsgBoxResult.Retry
  • sSection = InputBox("Donner le nom de la section", "Ecriture d'un cle", sSection)
  • sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
  • sSection = "[" & sSection & "]" 'Ajouter les crochets
  • GoTo retry
  • Case MsgBoxResult.Abort
  • Return False
  • End Select
  • End If
  • End Function
  • #End Region
  • End Class
Public Class ReadWriteINI
    Implements IDisposable

    Private sFichierIni As String
    Private sNomFichierIni As String
    Private sCheminFichierIni As String

    Public Event TextChange()


#Region "Manupilation Macroscopique <Dehors du sFichier ini>"
    Private Function est_ini(ByVal sIni As String)
        Return System.IO.Path.GetExtension(sIni).ToString.ToLower = ".ini"
    End Function
    Private Sub permute_fichiers(ByVal sFichierTmp As String)
        System.IO.File.SetAttributes(sFichierIni, IO.FileAttributes.Normal) 'pour etre supprimer ensuite
        System.IO.File.Delete(sFichierIni)
        System.IO.File.Move(sFichierTmp, sFichierIni)
        System.IO.File.SetAttributes(sFichierIni, IO.FileAttributes.Normal + IO.FileAttributes.ReadOnly)
    End Sub

    Public Sub Changer_ini(ByVal sVal As String, Optional ByVal bSur As Boolean = False)

        If Not System.IO.File.Exists(sVal) Or Not est_ini(sVal) Then
            If est_ini(sVal) Then 'si il n'est pas existant mais ini

                If Not bSur Then 'l'utilisateur n'a pas forcer la création?ile faut lui demander
                    If MsgBox("Voulez vous commême créer un fichier qui comporte ce nom ?" _
                                    , MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, _
                                    "Ce nom n'est pas existant") <> MsgBoxResult.Yes Then
                        'si l'utilisateur ne veut pas conserver ce nom
                        Me.Dispose()
                        Exit Sub
                    End If
                End If
                Try
                    System.IO.File.Create(sVal)
                    Exit Try
                Catch ex As System.IO.DirectoryNotFoundException
                    System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(sVal))
                    System.IO.File.Create(sVal)
                    Exit Try
                Catch ex As Exception
                    sVal = String.Empty
                    MsgBox("Verifier que le volume n'est pas on lecture seul ou inixistant", MsgBoxStyle.Critical, "Type d'erreur: " & ex.GetType.ToString)
                End Try


                RaiseEvent TextChange()
            Else 'ni existant ni ini
                MsgBox("Vérifier le nom du fichier et le chemin", MsgBoxStyle.Critical)
                Exit Sub
            End If
        End If
        If String.Compare(Me.sFichierIni, sVal) Then
            Me.sFichierIni = sVal
            RaiseEvent TextChange()
            System.Threading.Thread.Sleep(700)
        End If
    End Sub

#End Region

#Region "Propriétées"
    Public ReadOnly Property IniNom() As String
        Get
            sNomFichierIni = System.IO.Path.GetFileName(sFichierIni)
            Return sNomFichierIni
        End Get
    End Property
    Public ReadOnly Property IniChemin() As String
        Get
            sCheminFichierIni = System.IO.Path.GetDirectoryName(sFichierIni)
            sCheminFichierIni.Trim("\")
            sCheminFichierIni &= "\"
            Return sCheminFichierIni
        End Get
    End Property
    Public ReadOnly Property IniNomTotal() As String
        Get
            Return Me.sFichierIni
        End Get
    End Property
#End Region

#Region "Constructeur"
    Sub New(ByVal sVal As String, Optional ByVal bSur As Boolean = False)
        changer_ini(sVal, bSur)
    End Sub
#End Region

#Region "Destructeur"
    Public Sub Dispose() Implements System.IDisposable.Dispose
        With Me
            .sNomFichierIni = Nothing
            .sFichierIni = Nothing
            .sCheminFichierIni = Nothing
        End With
    End Sub
#End Region

#Region " long signature"

    'Public Function lireIniValeur(ByVal sSection As String, ByVal sCle As String, Optional ByRef iLine As Integer = 0) As String
    '    'elle retourne Nothing si la clé est non trouver
    '    Dim bSection As Boolean = False 'On n'a pas trouver la bonne section
    '    Dim bCle As Boolean = False 'On n'a pas trouver la bonne cle
    '    sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
    '    sSection = "[" & sSection & "]" 'Ajouter les crochets

    '    Dim sValeur As String 'variable où on va mètre la valeur du cle

    '    Try

    '        Dim monStreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
    '        Dim sLine As String ' Variable contenant le texte de la sLine
    '        iLine = 0
    '        Do
    '            'REMARQUE:on sore de la boucle si:
    '            '1-on a truver la clé
    '            '2-on a trouver la section est on a pas trouver la clé
    '            '3-Sortie normal: si on a pas trouver la clé

    '            sLine = monStreamReader.ReadLine : iLine += 1

    '            If sLine <> Nothing And Left(sLine, 1) <> ";" And sLine <> "" Then
    '                'les lignes necessaires

    '                If Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then 'si c'est une section


    '                    If Not bSection Then 'si on a pas trouver la bonne section
    '                        If String.Compare(sLine.ToLower, sSection.ToLower) = 0 Then 'notre section est trouver
    '                            bSection = True
    '                            'la prochaine section on sore
    '                            'la vérification du cle est possible
    '                        End If 'si notre section n'est pas trouver on va à la prochaine ligne
    '                    Else 'la section est déja trouver, la clé?
    '                        'il faut sortir de la procédure
    '                        sValeur = Nothing
    '                        Exit Do
    '                    End If
    '                Else 'si ce n'est pas une section
    '                    If bSection Then 'si on a trouver déja la section désirer
    '                        Dim n As Integer
    '                        n = InStr(1, sLine, "=")
    '                        If n <> 0 Then
    '                            If String.Compare(Left(sLine, n - 1).ToLower, sCle.ToLower) = 0 Then 'si on a trouver la cle
    '                                bCle = True
    '                                sValeur = Right(sLine, sLine.Length - n).ToString
    '                                Exit Do
    '                            End If 'si on a pas trouver la cle on va à la prochaine ligne
    '                        End If
    '                    End If 'Si on a pas trouver déja la section désirer on va à la prochaine ligne
    '                End If
    '            End If
    '        Loop Until sLine Is Nothing

    '        monStreamReader.Close()
    '        'jusqu'à ici tout va bien

    '    Catch ex As Exception
    '        MsgBox("Une erreur Function lireIniValeur", MsgBoxStyle.Critical, "sFichier config.ini...")
    '    End Try

    '    Return sValeur
    'End Function


    'Public Sub ecrireIniValeur(ByVal sSection As String, ByVal sCle As String, ByVal sValeur As String)
    '    'ATTENTION :il faut que l'attribut, du fichier ini, ne soit pas en lecture seul
    '    Dim iValPos As Integer = 0
    '    If lireIniValeur(sSection, sCle, iValPos) <> Nothing Then
    '        Dim sFichierTmp As String = sCheminFichierIni & "tmpconfig.ini"
    '        If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
    '        Try
    '            Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
    '            Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
    '            System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
    '            Dim sLine As String ' Variable contenant le texte de la sLine
    '            Dim i As Integer = 0
    '            Do
    '                sLine = monstreamReader.ReadLine : i += 1
    '                If i = iValPos Then
    '                    monstreamWriter.WriteLine(sCle & "=" & sValeur)
    '                Else
    '                    monstreamWriter.WriteLine(sLine)
    '                End If
    '            Loop Until sLine Is Nothing
    '            monstreamReader.Close()
    '            monstreamWriter.Close()
    '            'jusqu'à ici tout va bien
    '            permute_fichiers(sFichierTmp)
    '        Catch ex As Exception
    '            MsgBox("Une erreur Sub ecrireIniValeur.", MsgBoxStyle.Critical, "ouverture du sFichier config.ini")
    '        End Try
    '    End If
    'End Sub
#End Region

#Region "Lecture seul"
    Public Function Lire_cle(ByVal sSection As String, ByVal sCle As String) As String
        Dim ipos As Int16 = 0
        If Me.existe_Cle(sSection, sCle, ipos) Then
            Dim i As Int16 = 0
            Dim sLine As String
            Try
                Dim monstreamreader As New System.IO.StreamReader(Me.IniNomTotal)
                Do
                    sLine = monstreamreader.ReadLine() : i += 1
                    If i = ipos Then
                        Dim svaleur As String
                        Dim n As Int16
                        n = InStr(1, sLine, "=")
                        svaleur = Right(sLine, sLine.Length - n).ToString
                        monstreamreader.Close()
                        Return svaleur
                    End If
                Loop Until sLine = Nothing
                monstreamreader.Close()
            Catch ex As Exception
                MsgBox(ex.GetType.ToString, MsgBoxStyle.Critical, "Function Lire_cle")
            End Try
        End If
    End Function
#End Region

#Region "Controle"
    Private Function existe_Section(ByVal sSection As String, Optional ByRef iLine As Integer = 0) As Boolean
        sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
        sSection = "[" & sSection & "]" 'Ajouter les crochets
        Try
            Dim monStreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
            Dim sLine As String ' Variable contenant le texte de la sLine
            Do
                sLine = monStreamReader.ReadLine : iLine += 1
                If Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then 'si c'est une section
                    If String.Compare(sLine.ToLower, sSection.ToLower) = 0 Then
                        monStreamReader.Close()
                        Return True
                    End If
                End If
            Loop Until sLine Is Nothing
            monStreamReader.Close()
        Catch ex As Exception
            MsgBox("Une erreur Function existe_Section", MsgBoxStyle.Critical, "sFichier config.ini...")
        End Try
        iLine = 0
        Return False
    End Function
    Private Function existe_Cle(ByVal sSection As String, ByVal sCle As String, Optional ByRef iLine As Int16 = 0) As Boolean
        iLine = 0
        If existe_Section(sSection, iLine) Then 'le valeur de iline= pos de sectionsi car elle existe (sinon =0)
            Try
                Dim monStreamReader As New System.IO.StreamReader(Me.sFichierIni)
                Dim sLine As String
                Dim i As Integer = 0
                Do
                    sLine = monStreamReader.ReadLine() : i += 1 'incrementer la ligne de lecture avec i
                    If i > iLine Then 'car iline represente la section elle meme
                        If Left(sLine, 1) = "[" And Right(sLine, 1) = "]" Then Exit Do 'si 2 sections sont succésuves on sore
                        If bcompare(sLine, sCle) Then 'si cette ligne contienne notre clé
                            iLine = i 'on retourne la position
                            monStreamReader.Close() 'je ferme le fichier
                            Return True 'je sore
                        End If
                    End If
                Loop Until sLine = Nothing
                monStreamReader.Close()
            Catch ex As Exception
                MsgBox("Vérifier le code dans <existe_Cle>", MsgBoxStyle.Critical, ex.GetType.ToString)
            End Try
        End If
        Return False 'si je suit ici se qui signefie que j'ai n'est pas trouver le clet donc iline=0
    End Function 'la valeur du diline est soit la position du cle  soit =0 
    Private Function bcompare(ByVal sLine As String, ByVal scle As String) As Boolean
        Dim n As Integer
        n = InStr(1, sLine, "=")
        If n <> 0 Then
            If String.Compare(Left(sLine, n - 1).ToLower, scle.ToLower) = 0 Then 'si on a trouver la cle
                Return True
            End If 'si on a pas trouver la cle on va à la prochaine ligne
        End If
        Return False 'ce n'est pas une ligne qui contien un clé
    End Function

#End Region

#Region "Lecture/Ecriture"

    Private Sub insert_cle(ByVal sCle As String, ByVal ipos As Integer)
        Dim sFichierTmp As String = Me.IniChemin & "tmpconfig.ini"
        If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
        Try
            Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
            Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
            System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
            Dim sLine As String
            Dim i As Integer = 0
            Dim deja As Boolean = False
            Do
                sLine = monstreamReader.ReadLine : i += 1
                'si le cle n'existe pas ------------>pos=pos section===>inserer apres la position et avant une autre section
                If i > ipos And ((Left(sLine, 1) = "[" And Right(sLine, 1) = "]") Or sLine = "") And Not deja Then
                    monstreamWriter.WriteLine(sCle & "=")
                    monstreamWriter.WriteLine(sLine)
                    deja = True
                Else
                    monstreamWriter.WriteLine(sLine) '+
                End If
            Loop Until sLine Is Nothing
            monstreamReader.Close()
            monstreamWriter.Close()
            'jusqu'à ici tout va bien
            permute_fichiers(sFichierTmp)

        Catch ex As Exception
            MsgBox("Sub ecrire_cle.si le cle n'existe pas", MsgBoxStyle.Critical, "ouverture du sFichier config.ini")
        End Try
    End Sub
    Private Sub insert_cle(ByVal sCle As String, ByVal ipos As Integer, ByVal sval As String)
        Dim sFichierTmp As String = Me.IniChemin & "tmpconfig.ini"
        If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
        Try
            Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
            Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
            System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)
            Dim sLine As String
            Dim i As Integer = 0
            Do
                sLine = monstreamReader.ReadLine : i += 1
                'si le cle n'existe pas ------------>pos=pos section===>inserer apres la position et avant une autre section
                If i = ipos Then
                    If bcompare(sLine, sCle) Then monstreamWriter.WriteLine(sCle & "=" & sval)
                Else
                    monstreamWriter.WriteLine(sLine) '+
                End If
            Loop Until sLine Is Nothing
            monstreamReader.Close()
            monstreamWriter.Close()
            'jusqu'à ici tout va bien
            permute_fichiers(sFichierTmp)

        Catch ex As Exception
            MsgBox("Sub ecrire_cle.si le cle n'existe pas", MsgBoxStyle.Critical, "ouverture du sFichier config.ini")
        End Try
    End Sub

    Public Function ecrire_Section(ByVal sSection As String) As Boolean
        
        If existe_Section(sSection) Then
            Return False
        Else
            Dim sFichierTmp As String = Me.IniChemin & "tmpconfig.ini"
            If System.IO.File.Exists(sFichierTmp) Then System.IO.File.Delete(sFichierTmp)
            System.IO.File.SetAttributes(Me.sFichierIni, IO.FileAttributes.Normal)

            sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
            sSection = "[" & sSection & "]" 'Ajouter les crochets
            Try
                Dim monstreamReader As New System.IO.StreamReader(sFichierIni) 'Stream pour la lecture
                Dim monstreamWriter As New System.IO.StreamWriter(sFichierTmp) 'Stream pour l' ecriture
                System.IO.File.SetAttributes(sFichierTmp, IO.FileAttributes.System + IO.FileAttributes.Hidden)

                Dim sLine As String

                Do
                    sLine = monstreamReader.ReadLine
                    If sLine = Nothing Then
                        monstreamWriter.WriteLine(sSection)
                    Else
                        monstreamWriter.WriteLine(sLine)
                    End If
                Loop Until sLine = Nothing

                monstreamReader.Close()
                monstreamWriter.Close()
                permute_fichiers(sFichierTmp)
                Return True
            Catch ex As Exception
                MsgBox("Vérifier le code dans <ecrire_Section>", MsgBoxStyle.Critical, ex.GetType.ToString)
            End Try
        End If
    End Function
    Public Function ecrire_cle(ByVal sSection As String, ByVal sCle As String, Optional ByVal sValeur As String = "") As Boolean
        Dim ipos As Int16
        Dim Sectpos As Int16
retry:
        If existe_Section(sSection, ipos) Then 'si la section existe ipos=pos de section
            Sectpos = ipos
            If existe_Cle(sSection, sCle, ipos) Then 'si le cle existe ipos=pos du clé sinon =0

                If sValeur = "" Then
                    Return False 'cad quand je ne met pas valeur<-->je ne veut pas le modifier
                Else 'Cle=NouveauValeur ATTENTION:la position est celle du cle elle tj > pos section
                    insert_cle(sCle, ipos, sValeur) 'ipos ne change pas apres sortie=pos cle
                End If
            Else 'si le cle n'existe pas --> Remember:j'ai la position de section
                insert_cle(sCle, Sectpos) 'ipos ne change pas apres sortie=pos section
            End If
        Else 'la section n'existe pas : creation de la section+cle+valeur par défaut a la fin du fichier
            Select Case MsgBox("Cette section n'existe pas" & vbCrLf & "Risque d'inATTENTION ", _
                        MsgBoxStyle.Exclamation + MsgBoxStyle.AbortRetryIgnore, "Ecriture d'un cle")
                Case MsgBoxResult.Ignore
                    ecrire_Section(sSection)
                    Try
                        Dim monStreamWriter As New System.IO.StreamWriter(Me.sFichierIni, True)
                        monStreamWriter.WriteLine(sCle & "=" & sCle)
                        monStreamWriter.Close()
                        Return True
                    Catch ex As Exception
                        MsgBox("Vérifier le code dans <ecrire_Cle>")
                        Return False
                    End Try
                Case MsgBoxResult.Retry
                    sSection = InputBox("Donner le nom de la section", "Ecriture d'un cle", sSection)
                    sSection = sSection.Trim("[", "]") 'enlever les crochets si elles existent
                    sSection = "[" & sSection & "]" 'Ajouter les crochets
                    GoTo retry
                Case MsgBoxResult.Abort
                    Return False
            End Select
        End If
    End Function

#End Region

End Class

 Conclusion

j'espère que ça va vous aider un peu; en tout cas c'est un essai et c'est ma première application que j'ai faite avec VB.net

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 avril 2005 10:42:07 :
Voila le zip avec une petite application pour aider à mieux comprendre le but de cette classe merci a tout j'aime bien vos commentaires
05 avril 2005 10:49:10 :
Salut, je vous transmets le fichier zippé. Il contient la classe et une petite application pour vous montrer ce que je voulais avoir. Merci pour vos commentaires

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
ROUTINE DIR RÉCURSIVE POUR OBTENIR LA LISTE DE TOUS LES FICH... par kerisolde
Source avec Zip Source avec une capture FILE,SECURITY,FICHIER par okosa
Source avec Zip Source avec une capture Source .NET (Dotnet) PATCHEUR DE FICHIER par tototh
Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R... par jack

Commentaires et avis

Commentaire de darunia le 31/03/2005 18:24:55

Salut,

Est ce que tu sais qu'il existe des fonctions win32 qui permettent de gerer les fichier ini très facilement. Mais, bon, pour un 1er programme, c'est quand meme bien car c'est en programmant qu'on apprend le mieux !

Commentaire de juvamine le 01/04/2005 08:52:57

Il existe deja nativement une classe de gestion des Ini sous .NET non ?

Commentaire de pit1 le 01/04/2005 22:53:26

Une application .net peut gérer un fichier de config "app.config" en XML avec la classe System.Configuration.ConfigurationSettings.AppSettings("xxx")... Plus besoin de fichiers ini!

Commentaire de Anne Onyme le 02/04/2005 21:14:23

Salut,
premier prog hein... sympa. Pour ce prix, t'aurais pu mettre un .zip ;)
J'aimerais poser une question au sujet des "premiers programmes" justement. Je crois avoir une vraiment bonne connaissance de Vb6 et je me met juste à .Net... concretement je trouve le bignoux vachement plus compliqué ce qui en soit ne poserait pas de probleme si l'interet était avéré... Alors concretement... voila ma quetion: Par ou je dois prendre le machin pour commencer a progger en Vb.Net tout en aillant au moins un apercu de ce que je peux faire avec qu'on ne puisse pas deja faire en Vb6? (petite précision, je manie pas mal le Java aussi... si ca peut aider mais bon, Vb6 est deja un language objet si on sait s'en servir)
Merci d'avance...
@BriBus

Commentaire de TeBeCo le 15/04/2005 00:50:09

pour darunia => si tu fais du .net c'est pas pour utiliser des APi, a savoir les API sont plus lente que le code managé de .net donc c  une mauvaise idée, ca fais plusieur année que je code .net et j'ai jamais eu besoin d'utiliser d'api dans mon code

pour Juvamine => nan ca n'existe pas et c'est normal

pour pit1 => t'a tout compris, le XML est la pour remplacer tte structure de donnée a stocké ou a chargé en memoire, exemple sous PocketPc les base de donnée peuvent etre chgargé instantanément en memoire avec un acces direct defiant tte rapidité

le XML est en plein essort actuellement alors l'jhistoisire des ini, base de registre fichier text ou autre connerie nan merci., XML, XSLT, XSL, tous les fichier office sont codé en XML et avec Word par exemple on peut codé des base de donnée XML ya un SDK pour le "XML managing for Word" sur MSDN, dump de base de doonée SQL, access ... sous SQL de manière extremement simple pour utilsation en memoire et non pas en dur ....

enfin bon je suis content qu'il y ai du monde sur .net
oublier pas de passer sur le serveur IRC pour tte question .net ya du monde dorenavant dessus pour aide =>

irc1.heliosnet.org:6667
chat.viendez.com:6667
salon => #Programmation

++all

Commentaire de GabSoftware le 11/05/2005 01:37:33

si vous voulez, j'ai fait une classe qui gère le XML
ici : http://www.vbfrance.com/code.aspx?id=30445

Commentaire de rt15 le 16/11/2005 18:53:37 administrateur CS

pour darunia => si tu fais du .net c'est pas pour utiliser des APi, a savoir les API sont plus lente que le code managé de .net donc c  une mauvaise idée, ca fais plusieur année que je code .net et j'ai jamais eu besoin d'utiliser d'api dans mon code

Gargleu.

Ca, c'est resté en travers de ma gorge !

Les API, pas rapide ?

Plus lentes que .NET ?

Derrière .NET, il me semble qu'il y a beaucoup d'API Win32, qu'ont pas bougé d'un pouce. Pour preuve, dotnet fait 20 Mo sauf erreur, alors que l'API, houla... Spas... 500 Mo ? 1 Go ?

Les API, c'est Windows.

.NET, c'est un interpréteur.

Et met avis qu'il balance passe sont temps en demande aux API, ne serait ce qu'en accès disque, ne serait ce que pour un XML.

Le code managé ? Tu perds du temps à le manager à l'execution ton code.

Vi vi des fois, même Java bat le C... Mais c'est quand même pas tous les front d'horloges !

Commentaire de BruNews le 16/11/2005 19:08:13 administrateur CS

ah oui j'avais aussi loupé cette perle.
Pour les bases de données, là on culmine.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 3,728 sec (3)

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