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 :

Méthodes pour mémoriser des paramètres utilisateurs


Sujet :

VB.NET

  1. #21
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    @wallace1
    Merci ton exemple m'a bien aidé.
    Il me manquait en fait l'instruction xcfg.save qui n'était pas indiquée dans le tuto de l'auteur de la DLL

    Je pense que j'ai toutes les billes pour tenter de basculer vers un fichier INI ou XML pour mes paramètres.
    Ca me semble beaucoup plus facile à coder (et plus lisible aussi) que la solution base de données.

    Un grand merci à tous pour cette vue d'ensemble des différentes possibilités.

  2. #22
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    @wallace1

    J'ai un petit souci avec le XMLConfig. Peut-être l'as-tu déjà rencontré ?

    Pour initialiser rapidement mes settings, j'ai créé une fonction qui lit le paramètre dans le fichier XML s'il existe et renvoie une valeur par défaut, dans le cas contraire, tout en écrivant cette valeur dans le fichier au passage.

    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
     Public Function GetXMLSetting(ByVal sPath As String, ByVal defaultvalue As Object, ByVal ParamArray sNode() As String) As String
            ' Lit un paramètre dans le fichier XML s'il existe
            ' si defaultValue est renseigné, la valeur est inscrite dans le fichier
            ' si le paramètre n'existe pas dans le fichier et si default value n'est pas renseigné, retourne nothing
            Try
                Dim xcfg As New Xmlconfig(sPath, False)
     
                ' reconstitution de la chaîne de noeuds
                Dim sSetting As String = Nothing
                Dim node1 As ConfigSetting = xcfg.Settings(sNode(0))
                For i = 0 To sNode.Count - 2
                    sSetting &= sNode(i) & "/"
                Next
                sSetting &= sNode(sNode.Count - 1)
     
                If xcfg.Settings(sSetting).Value = String.Empty AndAlso Not defaultvalue Is Nothing Then
                    ' si la valeur n'existe pas dans le fichier et si defaultvalue n'est pas "Nothing", alors on écrit la valeur dans le fichier XML
                    xcfg.Settings(sSetting).Value = defaultvalue
                    xcfg.Save(sPath)
                End If
                GetXMLSetting = xcfg.Settings(sSetting).Value 'on retourne la valeur du fichier XML
                xcfg.Dispose()
            Catch ex As Exception
                MessageBox.Show(ex.ToString, "GetXMLSetting")
            End Try
    Ensuite, j'y fais appel, parfois en masse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Dim sBackupPath As String = GetXMLSetting(XMLfullpath, default_backup_folder, "Backup", "BackupPath")
                Dim IsPeriodicBackup As Boolean = CBool(GetXMLSetting(XMLfullpath, DEFAULT_IS_PERIODIC_BACKUP, "Backup", "IsPeriodicBackup"))
    Lors de l'exécution, j'ai une IOException à la ligne 18 de ma fonction (fichier déjà utilisé). Cette erreur n'est pas systématique. C'est comme si la ressource xcfg n'était pas libérée assez vite. J'ai rajouté un Dispose mais ça ne semble pas changer grand chose.
    Qu'en penses-tu ?
    A dire vrai j'ai déjà rencontré le même genre de pb avec des File.Delete mais j'avais pu m'en tirer en reportant l'instruction plus loin dans le code. Ici, je ne peux pas le faire. Comment peut-on résoudre ce pb ?

  3. #23
    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
    Salut Noftal,

    J'avais effectivement rencontré ce problème que j'ai résolu en ajoutant 1 méthode et en modifiant une autre :

    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
     
      '--------------------Adding Inexisting File Exception---------------------
            Private Sub CreateFile(filename$)
                If File.Exists(filename) = False Then
                    File.Create(filename).Close()
                    Using sw As StreamWriter = New StreamWriter(filename)
                        sw.Write("<xml></xml>")
                    End Using
                End If
            End Sub
     
            Friend Sub LoadXmlFromFile(ByVal filename$, ByVal create As Boolean)
                CreateFile(filename)
                If Me.CommitOnUnload Then
                    Me.Commit()
                End If
                Try
                    Me._xmldoc.Load(filename)
                Catch ex As Exception
                    If create = false Then
                        Throw New Exception("xmldoc.Load() échec! Le fichier n'existe probablement pas!")
                    End If
                    Me._xmldoc.LoadXml("<xml></xml>")
                    Me.Save(filename)
                End Try
                Me.ValidateXML(False)
                Me._OriginalFile = filename
            End Sub

    Voilà j'espère que cela t'aidera.

    A+

  4. #24
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Non, ça ne change rien, mais je crois que j'ai l'explication. Le code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Dim sBackupPath As String = GetXMLSetting(XMLfullpath, default_backup_folder, "Backup", "BackupPath")
                Dim IsPeriodicBackup As Boolean = CBool(GetXMLSetting(XMLfullpath, DEFAULT_IS_PERIODIC_BACKUP, "Backup", "IsPeriodicBackup"))
    se trouve en fait dans un thread distinct du thread principal.
    Quelques instructions après le lancement de ce thread (par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BackgroundWorker1.RunWorkerAsync()
    ), j'ai des accès au fichier XML (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xcfg As New Xmlconfig(XMLfullpath, False)
    ).
    C'est ce qui fait que je peux avoir 2 xcfg qui ouvrent et manipulent le fichier en même temps.
    Cela explique la IO.exception, et le côté aléatoire de cette exception puisque l'asynchronisme des threads fait que, parfois, le xcfg du thread 1 est libéré avant l'ouverture du xcfg du thread principal.

    Maintenant, il me reste à trouver la parade.

    EDIT : bon, ben ça m'a pris 5 minutes. J'ai juste déporté les instructions GetXMLSetting dans le thread principal... Il se trouve que je pouvais.
    Merci en tout cas pour ton aide.

  5. #25
    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
    Arff effectivement ça ne devait pas être le même soucis ...
    Pas de quoi.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Meilleure méthode pour faire des coins arrondis
    Par kodokan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/09/2006, 15h08
  2. Réponses: 1
    Dernier message: 06/09/2006, 18h11
  3. Réponses: 5
    Dernier message: 17/08/2006, 10h10
  4. Méthode pour traiter des commandes
    Par Kr00pS dans le forum C
    Réponses: 17
    Dernier message: 15/06/2006, 17h58

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