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 :

Ecriture et lecture fichier .ini


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Par défaut Ecriture et lecture fichier .ini
    Bonjour à tous !

    Voici mon problème :

    Mon logiciel à besoin de sauvegarder des informations dans un fichier .ini et de les lires au lancement du logiciel.

    Voici mon code pour écrire :

    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
     
    Sub writeini(ByVal Timesave As String, ByVal Hsave As String, ByVal Msave As String, ByVal pathsave1 As String, ByVal pathsave2 As String,
                     ByVal ShowNotify As Boolean, ByVal autosave As Boolean)
            Nbrligneini = 0
            Dim sw As New StreamWriter(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\CONFIG.ini")
            sw.WriteLine(";Fichier de configuration de FileSecur")
            sw.WriteLine("[Configuration]")
            sw.WriteLine(cletimesave + "=" + Timesave)
            sw.WriteLine(cleHoursave + "=" + Hsave)
            sw.WriteLine(cleMinsave + "=" + Msave)
            sw.WriteLine(clepathsaveini1 + "=" + pathsave1)
            sw.WriteLine(clepathsaveini2 + "=" + pathsave2)
            sw.WriteLine(cleShowNotify + "=" + ShowNotify.ToString)
            sw.WriteLine(cleautosave + "=" + autosave.ToString)
            sw.WriteLine("Nbrligne=" + ListBox1.Items.Count.ToString)
            sw.WriteLine("[Paths]")
            For Each item In ListBox1.Items
                Nbrligneini += 1
                sw.WriteLine(clepathini + Nbrligneini.ToString + "=" + item)
            Next
            sw.Close()
        End Sub
    Tout les mot commencant par "cle" sont des constantes string.

    J'obient un fichier .ini comme celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ;Fichier de configuration de FileSecur
    [Configuration]
    Timesave=11/09/2016 17:32:19
    Hsave=1
    Msave=0
    save1= (chemin du dossier de destination)
    save2=
    ShowNotify=True
    AutoSave=False
    Nbrligne= (nombre de path)
    [Paths]
    Path1= (chemin dossier source)
    Path2= (chemin dossier source)
    Il y a autant de Paths dans la clause [Paths] que d'éléments dans une listbox sur le formulaire.

    Le probleme est a la lecture :

    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
     
    Sub readini()
            Nbrligneini = 0
            For Each Ligne As String In File.ReadAllLines(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\CONFIG.ini" + "")
                Nbrligneini += 1
                Select Case Ligne.Split("=")(0)
                    Case cletimesave
                        TextBox1.Text = Ligne.Split("=")(1)
                    Case cleHoursave
                        NumericUpDown1.Value = CInt(Ligne.Split("=")(1))
                    Case cleMinsave
                        NumericUpDown2.Value = CInt(Ligne.Split("=")(1))
                    Case clepathsaveini1
                        TextBox2.Text = Ligne.Split("=")(1)
                    Case clepathsaveini2
                        TextBox3.Text = Ligne.Split("=")(1)
                    Case cleShowNotify
                        ShowNotify = Ligne.Split("=")(1)
                    Case cleautosave
                        Autosave = Ligne.Split("=")(1)
                    Case nbrligne
                        Nbrligneini = CInt(Ligne.Split("=")(1))
                    Case clepathini + Nbrligneini.ToString
                        ListBox1.Items.Add(Ligne.Split("=")(1))
                End Select
            Next
        End Sub
    En effet, le fichier est bien lu et tout les élément sont dans ma form (date...) sauf les paths ! je ne sais pas pourquoi il refuse de m'ajouter pour chaque paths dans le fichier, le paths dans ma listbox...

    Merci de votre aide !

    Ind6x

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    C'est parce que tu incrémentes ta variable Nbrligneini dès que tu lis une ligne dans ton fichier ini. Ainsi, quand tu arrives à la section qui contient tes chemins, si tu as as déjà lu 20 lignes tu vas rechercher une clé Path20 !

    Pour remedier au problème, tu as plusieurs possibilités :
    • Si le nombre de chemin est limité (par exemple max 4), alors tu peux faire 4 cas supplémentaires dans ton Select Case, avec Path1, Path2, Path3 et Path4.
    • Si le nombre de chemin n'est pas limité, il faut que tu gères cela dynamiquement. Tu peux utiliser une expression régulière, tu peux vérifier que la ligne commence par "Path", etc...

  3. #3
    Membre Expert
    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
    Billets dans le blog
    7
    Par défaut
    bonsoir,

    Je ne reviens pas sur la solution proposé par dorinf qui reglera certainement ton problème mais pourquoi ne pas utiliser une classe de gestion de fichiers .ini ?

    Comme celle-ci par exemple : http://www.developpez.net/forums/d11...i/#post7472174

    ++

  4. #4
    Membre confirmé Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Par défaut
    Je vous remercie beaucoup de vos réponses !

    J'ai remplacer mon code par :

    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
     
    Sub readini()
            For Each Ligne As String In File.ReadAllLines(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\CONFIG.ini" + "")
                If Ligne.Split("=")(0).Contains("Path") Then
                    ListBox1.Items.Add(Ligne.Split("=")(1))
                Else
                    Select Case Ligne.Split("=")(0)
                        Case cletimesave
                            TextBox1.Text = Ligne.Split("=")(1)
                        Case cleHoursave
                            NumericUpDown1.Value = CInt(Ligne.Split("=")(1))
                        Case cleMinsave
                            NumericUpDown2.Value = CInt(Ligne.Split("=")(1))
                        Case clepathsaveini1
                            TextBox2.Text = Ligne.Split("=")(1)
                        Case clepathsaveini2
                            TextBox3.Text = Ligne.Split("=")(1)
                        Case cleShowNotify
                            ShowNotify = Ligne.Split("=")(1)
                        Case cleautosave
                            Autosave = Ligne.Split("=")(1)
                        Case nbrligne
                            Nbrligneini = CInt(Ligne.Split("=")(1))
                    End Select
                End If
            Next
        End Sub
    et cela fonctionne a merveille !

    Cepandant, j'ai une autre question !

    Lorsque j'enregistre, un fichier .ini est crée puis écrit. Lorsque je lance mon programme celui ci est lu. Cepandant, lorsque je referme mon programme, le fichier .ini se supprime ! Ce qui signifie que la fois suivante, il ne peut pas charger les données.. Est-ce normal ?

    Merci encore !

  5. #5
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Ind6x Voir le message
    Lorsque j'enregistre, un fichier .ini est crée puis écrit. Lorsque je lance mon programme celui ci est lu. Cepandant, lorsque je referme mon programme, le fichier .ini se supprime ! Ce qui signifie que la fois suivante, il ne peut pas charger les données.. Est-ce normal ?
    A vu de nez, non ! J'aurais tendance à dire qu'il est supprimé quelque part au sein de l'application. Il n'y a pas une fonction qui fait un peu de ménage et qui traine dans un coin ??

  6. #6
    Membre confirmé Avatar de Cybercope
    Homme Profil pro
    Programmeur amateur
    Inscrit en
    Mai 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Programmeur amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 78
    Par défaut
    Suis - je bêtes !

    Effectivement, j'avais oublier que j'avais appeler la suppression de ce fichier lors du démarrage de mon application ! veuillez m'excuser pour vous avoir dérangé inutilement...

    je marque ce sujet comme résolu

    Merci infiniment de votre aide !

    A+ Ind6x

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

Discussions similaires

  1. problème ecriture et lecture fichier binaire
    Par gonzo59 dans le forum C++
    Réponses: 5
    Dernier message: 16/04/2009, 20h02
  2. ecriture sur un fichier ini
    Par tenderstoune dans le forum C++
    Réponses: 4
    Dernier message: 01/08/2008, 10h40
  3. Ecriture/ lecture fichier INI pour connexion base de données
    Par lyraaa dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/06/2007, 20h37
  4. [VBA-Excel]probleme d'ecriture dans un fichier ini
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/07/2006, 18h45

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